default template argument einer klasse
-
hola leute
gibt es eine moeglichkeit einer template-klasse ein default argument zu geben ?
hab folgendes probiert:template<class T = void> class test { public: test& operator=(const test &t) { return *this; } };syntax wird nicht angemeckert, aber wenn ich dann ne instanz erstellen will kommt natuerlich
Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.gibt es eine moeglichkeit das zu bewerkstelligen ?
hintergrund:
die klasse waere ansich keine template klasse. ich brauch es nur zum ausfuehren von bestimmten code. die klasse ist ne einfache error klasse.template<class T = void> class test { public: test& operator=(const test &t) { value = t.value; return *this; } int value; }; template<> test<use_exception>& test<use_exception>::operator=(const test &t) { if(t.value != 0) throw test(*this); value = t.value; return *this; }use_exception is ne psoido-klasse.
nun kann ich beim erstellen der klasse mir aussuchen ob ne exception geworfen wird oder nicht. koennte dann so aussehentest<use_exception> err; err = irgend_eine_funktion();bei der zuweisung kann dann bei bedarf eine exception geworfen werden, wenn man nicht C-like den fehlercode selber abfragen will.
warum ich nicht grundsaetzlich aus der funktion eine exception werfe ?
die error-klasse wird aus einer dll zurueck gegeben. davon abgesehen werden nicht nur richtige (schwerwiegende fehler) zurueck gegeben, sondern auch zum teil statusmeldungen.
Meep Meep
-
Keine Ahnung, was du versuchst, Fehlermeldungen ohne Code - oder umgekehrt - entspricht nicht gutem Fragestil. Auch mit Defaultargumenten muss i.d.R. trotzdem explizit angegeben werden, wenn eine bestimmte Templatespezialisierung gemeint sein soll, also ist mindestens eine leere Templateargumentliste erforderlich.
template Test<>;
-
hola
an
template Test<>;hab ich gestern gar nicht mehr gedacht. war wohl schon zu spaet.
hab es jetzt anders geloest wobei ich so nun fuer mich flexibler bin
kann es nun so machenlib_error err; err = mach_was_1(); use_exception(err) = mach_was_2(); /* hier fliegt automatisch ne exception bei einem richtigen fehler */Meep Meep
-
meistens trifft man default-Template-Parameter nicht schon im ersten Argument an, sondern später. Prominentes Beispiel ist der std::vector:
template <class T, class Alloc = std::allocator<T> > class vector;Wenn du mal einen Compilefehler bekommst, der sich in einem std::vector bemerkbar macht, siehst du das in vielen Compilern auch in der Fehlermeldung: