Code: Alles auswählen
Test<int, double, bool> x;
Test<float, int> y;
Test<std::string> z;

LG Glocke
Code: Alles auswählen
Test<int, double, bool> x;
Test<float, int> y;
Test<std::string> z;
Du kannst Default Parameter nehmen:Glocke hat geschrieben:Hi, bei der Deklaration von Template-Klassen kann ich ja beliebig (aber endlich viele) Typparameter hinzufügen. Gibt es eine Möglichkeit die Anzahl der Typparameter so zu wählen, dass folgendes Beispiel darauf anwenden kann, ohne die Template-Klasse Test mehrmals zu schreiben?
Einfach 3 Typparameter zu deklarieren und dann nur einen oder nur zwei zu verwenden, klappt nichtCode: Alles auswählen
Test<int, double, bool> x; Test<float, int> y; Test<std::string> z;
Da meckert gcc entsprechend.
Code: Alles auswählen
template< typename T, typename U=double, typename V=bool> class Test;
Code: Alles auswählen
class omitted {};
template< typename T, typename U=omitted, typename V=omitted> class Test
{
void func( T t, U u, V v ) { printf( "Drei Paramter\n" ); }
};
template< typename T >
class Test< T, omitted, ommitted >
{
void func( T t ) { printf( "Ein Paramter\n" ); }
};
Ah, interessantes Schlagwort: Variadic Templates ... hmm. Naja ich brauche effektiv zwei Varianten meiner Templateklasse: mit 2 und mit 3 Parametern. Ich glaube ich deklariere beide als eigenstände Templateklassen (mit gleicher Funktion)... ja das ist Redundanz pur xD Aber das Variadic Templates Zeug sieht dafür etwas overkill aus. Zumal ich die Typparameter intern noch für Methodenpointer verwende und das schon brainfuck genug istXin hat geschrieben:Und dann klingelt da noch was mit Variadic Templates, aber die habe ich noch nicht probiert, ich wechsle ja gerade erst auf clang, um C++11 endlich mal ausführlich nutzen zu können.
Dann ist es eine klar begrenzte Menge an Parametern - das würde ich mit Spezialisierung machen.Glocke hat geschrieben:Naja ich brauche effektiv zwei Varianten meiner Templateklasse: mit 2 und mit 3 Parametern.