Template Spezialisierung
-
Hallo!
Kann jemand ein kurzes Beispiel zur Template Spezialisierung geben? Ich möchte eine Unterscheidung machen, ob der Template-Parameter 10 oder 100 ist. Also einmal für 10 spezialisieren, und einmal für 100. Geht das? Und kann Visual C++ das auch?
-
Geht das?
Ja.
Und kann Visual C++ das auch?
Im Spezialfall ja. Fall es sich um ein Klassentemplate mit nur einem non-type-Parameter handelt ja.
Ansonsten musst du einen Workaround benutzen.Hier dein Beispiel:
template <unsigned> struct Foo; template <> struct Foo<10> { // Spezialisierung für 10 }; template <> struct Foo<100> { // Spezialisierung für 100 };
Oder geht es dir um Funktionstemplates?
-
Huhu! Vielen Dank! Das Beispiel war genau was ich suchte, es ging um Klassentemplates.
Jetzt hab ich noch ein großes Problem.
Ich möchte die Zahl mit der das Template instanziiert wird vom User einlesen, also in etwa:std::cout << "Geben Sie eine Zahl ein!" << std::endl; int i = 0; std::cin >> i; Foo<i> foo;
Es geht nur, wenn i const ist. Aber dann kann ich die Zahl ja nicht einlesen.
Gibt es da eine Lösung?
-
Gibt es da eine Lösung?
Nein. Alles was mit Templateinstanziierung zu tun hat geschieht zur *compile-Zeit*. Das Einlesen einer Benutzer-Eingabe geschieht aber natürlich zur *Laufzeit*.
-
templates werden zur compile zeit instanziiert.
ein workaround wäre:
class Foo { ... } template<int i> class realFoo : public Foo { ... } ... Foo* p; cin>>i; switch(i) { case 1: p=new realFoo<1>; break; case 2: p=new realFoo<2>; . . . } ... delete p;
-
Sehe ich auch nicht so ganz den sinn....
Entweder es ist spezialisiert oder nicht
Und wenn der Benutzer eine beliebige Zahl eingeben kann.... Wo ist da die Spezialisierung ?!Was hast Du denn genau vor ? Vllt. gibt es einen ganz anderen Weg !?