2010-08-13 20 views
7

Eine Template-Template-Spezifikation ist wie folgt:Vorlage Vorlage hohe Spezialisierung

template < template <class> class T > 
struct MyTemplate 
{ 
}; 

Wie soll ich insgesamt (oder teilweise) Spezialisierung für diese Vorlage erstellen? Ist das möglich?

+1

... Irgendwo spannend! Ich kann nicht warten! –

+0

Wer in der Welt stimmte zu schließen, und warum? Dies scheint eine absolut legitime, aktuelle Frage zu sein. –

+0

@Jerry: Wenn Sie die ersten 30 Sekunden der Frage gesehen haben (wo die Stimme abgegeben wurde), würde es Sinn machen. Es war nur der Code bis zu "{" ohne Frage. Ich machte den Kommentar: "'}; // Wohin gehst du damit? ", Worauf John antwortete. Aber es ist jetzt behoben. :) – GManNickG

Antwort

5

So:

#include <iostream> 

template <typename T> 
struct foo{}; 

template <typename T> 
struct bar{}; 

template < template <class> class T > 
struct MyTemplate 
{ 
    static const bool value = false; 
}; 

template <> 
struct MyTemplate<bar> 
{ 
    static const bool value = true; 
}; 


int main(void) 
{ 
    std::cout << std::boolalpha; 
    std::cout << MyTemplate<foo>::value << std::endl; 
    std::cout << MyTemplate<bar>::value << std::endl; 
} 
+0

GMan, gibt es eine Möglichkeit, auf MyTemplate Spezialisierung zu erzwingen, welche Art von T-Bar sollte erwarten? – scooterman

+0

@scooterman: Nun in Ihrer Klasse würden Sie einfach 'bar ' verwenden und es wird funktionieren oder nicht. Wenn ich deine Frage richtig verstehe. – GManNickG

3

Eine Spezialisierung hierfür wäre zum Beispiel sein:

template<> 
struct MyTemplate<std::auto_ptr> { 
    // ... 
}; 
Verwandte Themen