2016-04-13 9 views
0
class A{} 
class B{} 

namespace Other{ 

    class C {} 
    class D {} 

} 

template<typename T> T func() {} 
template<typename T> T func <Other::T>() {} 

Warum ist es nicht möglich, spezielle Version für Funktionen abhängig von Typen in unterschiedlichen Namensräumen zu haben? Also im Grunde, was ich haben möchte, ist eine Func-Version für alle Arten in anderen und eine andere Version für jeden anderen Typ. ich TMP Programmierung neu tut mir so leid, wenn die Frage zu einigen trivial scheint :)Spezialisiert für Klassen Template-Funktion in anderer Namespace

+1

Mögliches Duplikat von [sfinae verwenden, um die Existenz von Namespace-Mitgliedern zu testen] (http://stackoverflow.com/questions/3600244/use-sfinae-to-test-namespace-members-existence) – Klaus

+0

Was haben Sie versucht zu kompilieren? Welchen Fehler hast du bekommen? –

+0

Ich habe die Lösung in der Frage, die duplizieren soll, nicht wirklich verstanden! @underscore_d Der Compiler denkt, dass T ist eigentlich eine Klasse in anderen Namespace, so beschwert es sich, dass T nicht existiert in anderen – mkmostafa

Antwort

1

Warum ist es nicht möglich, Funktionen abhängig von Typen in unterschiedlichen Namensräumen spezialisiert Version zu haben?

Da gibt es keine Syntax in C++, um eine solche Spezialisierung darzustellen.

Ihre nächste Frage könnte sein, warum so etwas nicht existiert. Ich bin weder Stroustrup, noch das Komitee noch ein Mitglied des Komitees, also kann ich nur raten. Meine Vermutung ist, dass so etwas ursprünglich nie in Betracht gezogen wurde, aber wenn es so war, dann wurde es einfach als schlechte Designentscheidung betrachtet.

Es ist auch nicht trivial zu spezifizieren, wie solche Spezialisierung in einigen Situationen sich verhalten sollte. Betrachten Sie folgendes Beispiel:

namespace One{ 
    class C; 
} 

namespace Other{ 
    using One::C; 
} 

Welche Spezialisierung sollte Other::C verwenden? Was auch immer Sie entscheiden, es wird auf die eine oder andere Weise verwirrend sein.

Verwandte Themen