Template mit beliebig vielen Parameter

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Template mit beliebig vielen Parameter

Beitrag von Glocke » Mo Jun 10, 2013 9:28 am

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 :D Da meckert gcc entsprechend.

LG Glocke

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Template mit beliebig vielen Parameter

Beitrag von Xin » Mo Jun 10, 2013 9:42 am

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 :D 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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Template mit beliebig vielen Parameter

Beitrag von Glocke » Mo Jun 10, 2013 9:56 am

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 :D

Aber danke für den Hinweis :)

LG Glocke

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Template mit beliebig vielen Parameter

Beitrag von Xin » Mo Jun 10, 2013 10:14 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten