Konstruktorenverkettung bei Templates
-
Hallo!
Ich habe dieses Template geschrieben:
template <class T> class MyTemplate{ public: MyTemplate(int value){ } MyTemplate() : MyTemplate(10){ } };Die parameterlose Version des Konstruktors soll den Konstruktor mit Parameter aufrufen und einen Default-Wert übergeben. Allerdings funktioniert das nicht. Er sagt mir dass diese Version des Konstruktors weder Element der Klasse noch der Basisklasse ist.
Wie macht man das richtig?
Danke!
mfg
-
Hallo,
am besten ist es, du verwendest Default-Parameter. Dann nimmt er, wenn du nichts angibst, 10 als Default-Wert und sonst eben das, was du mitgibst:
template <class T> class MyTemplate { private: int val_; public: MyTemplate(int value=10) : val_(value) { } }; MyTemplate<int> a; //val_ = 10 MyTemplate<int> b(50); //val_ = 50Es gibt im Übrigen auch cpp Tags, dann wird der Code gehighlighted.
MfG
GPC
-
Danke, werde es so machen.
Aber rein interessehalber: es muss doch auch auf die andere Art gehen, oder? Was ist zum Beispiel, wenn ein Konstruktor 2 Parameter bekommt und die Summe der beiden an die Version mit nur einem Parameter weitergeben soll?
mfg
-
ChrisR schrieb:
Aber rein interessehalber: es muss doch auch auf die andere Art gehen, oder?
Nein. So etwas geht in C++ nicht.
Was ist zum Beispiel, wenn ein Konstruktor 2 Parameter bekommt und die Summe der beiden an die Version mit nur einem Parameter weitergeben soll?
Stattdessen kannst du Folgendes tun:
class foo { int value; void init(int v) { value = v; } // übernimmt die allgemeine Initialisierung. public: foo(int v1, int v2) { init(v1 + v2); // init mit v1 + v2 aufrufen. } foo(int v) { init(v); // init mit v aufrufen. } };Wobei du hier ebenfalls Default-Parameter verwenden kannst.
Gruß Caipi