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 aussehen

    test<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


  • Mod

    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 machen

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


Anmelden zum Antworten