Templateklasse std::pair problem
-
Hallo,
ich habe eine Templateklasse und eine Funktion mit einem Standardwert
Test(T& rhs = 0);
Da die Klasse bisher nur in Zusammenhang mit den Standarddatentypen verwendet wurde ist es kein Problem. Nun möchte ich ein std::pair als Datentyp verwenden. Ich bekomme aber natürlich einen Compilererror wenn ich dann versuche die Templateklasse zu kompilieren weil kein geeigneter Konstruktor für std::pair vorhanden ist der nur einen Wert aufnehmen kann (was sowieso doof ist...mal davon abgesehen ).
Welche Lösungen gibt es für solch ein Problem? Ich kann mir vorstellen dass ich vielleicht für bestimmte datentypen das Template irgendwie explizit definieren kann? Aber nur für diese eine Funktion.
Danke nochmals
Sam
-
Test(T const& rhs = T());
?
-
ok, hat sich erledigt. Hab einfach eine Wrapperklasse erstellt mit dem nötigen Konstruktor. Manchmal...
-
volkard schrieb:
Test(T const& rhs = T());
?
Würde das auch für die normalen Datentypen 0 als standardwert festlegen? Sprich der Defaultkonstruktor der standarddatentypen initialisiert diese mit 0?
-
Hmm, scheint mir eher so als seien die Standarddatentypen uninitialisiert wenn man es so macht wie du es vorschlägst. Liege ich da falsch?
-
Katachi schrieb:
Hmm, scheint mir eher so als seien die Standarddatentypen uninitialisiert wenn man es so macht wie du es vorschlägst. Liege ich da falsch?
Was sagt denn Dein Compiler?
-
volkard schrieb:
Was sagt denn Dein Compiler?
Mein Compiler macht keine Mucken, aber das muss ja zwangsläufig nichts heißen. Der Link sagt mir da jetzt nichts zu oder? Mir geht es darum dass wenn ich anstatt std::pair, int oder float habe, diese auch mit 0 initialisiert werden wenn die Funktion (so wie du sie aufgeführt hast) aufgerufen wird. Kann sein dass ich mich irre aber imo macht der Standardkonstruktor der Standarddatentypen nichts und sie bleiben uninitialisiert.
-
Katachi schrieb:
Mir geht es darum dass wenn ich anstatt std::pair, int oder float habe, diese auch mit 0 initialisiert werden wenn die Funktion (so wie du sie aufgeführt hast) aufgerufen wird.
Der "Standardkonstruktor" von Standarddatentypen macht eine Value-Initialisierung. Das entspricht (so der Wortlaut im Standard) "einer in den Zieltyp konvertierten 0".
Value-initialisert heisst etwas anderes als nicht initialisiert.
-
Die Klammern sinds. Wenn ich mich recht erinnere, ist int() das gleiche wie int(0).
Hab grad keine besseren links als http://msdn.microsoft.com/en-us/library/80ks028k(VS.80).aspx
-
Vielen Dank euch beiden! Wieder was dazugelernt. Super.