Seite 1 von 1
Template mit beliebig vielen Parameter
Verfasst: Mo Jun 10, 2013 9:28 am
von Glocke
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?
Code: Alles auswählen
Test<int, double, bool> x;
Test<float, int> y;
Test<std::string> z;
Einfach 3 Typparameter zu deklarieren und dann nur einen oder nur zwei zu verwenden, klappt nicht

Da meckert gcc entsprechend.
LG Glocke
Re: Template mit beliebig vielen Parameter
Verfasst: Mo Jun 10, 2013 9:42 am
von Xin
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?
Code: Alles auswählen
Test<int, double, bool> x;
Test<float, int> y;
Test<std::string> z;
Einfach 3 Typparameter zu deklarieren und dann nur einen oder nur zwei zu verwenden, klappt nicht

Da meckert gcc entsprechend.
Du kannst Default Parameter nehmen:
Code: Alles auswählen
template< typename T, typename U=double, typename V=bool> class Test;
Damit wäre Test<std::string> also in Wirklichkeit ein Test<std::string, double, bool>. Man könnte nun noch mit Spezialisierungen arbeiten:
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" ); }
};
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.
Re: Template mit beliebig vielen Parameter
Verfasst: Mo Jun 10, 2013 9:56 am
von Glocke
Xin 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.
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 ist
Aber danke für den Hinweis
LG Glocke
Re: Template mit beliebig vielen Parameter
Verfasst: Mo Jun 10, 2013 10:14 am
von Xin
Glocke hat geschrieben:Naja ich brauche effektiv zwei Varianten meiner Templateklasse: mit 2 und mit 3 Parametern.
Dann ist es eine klar begrenzte Menge an Parametern - das würde ich mit Spezialisierung machen.