Template mit optionalen Template-Parametern



  • Hallo!

    Ich schreibe ein Template, das 4 Template-Parameter bekommt. Nun soll einer davon in gewisser Weise optional sein (geht wahrscheinlich nicht direkt - die Frage ist nur wie ich das Problem umgehen kann).

    Also, ich habe dieses Template:

    template<class T, int32 rows, int32 cols, T defaultValue> class Matrix{
    }
    

    Es wird also eine Matrix mit einer bestimmten Zeilen- und Spaltenanzahl angelegt. Die Elemente sind von einem bestimmten Typ T und bekommen einen Default-Wert.

    Das Problem betrifft nun den Copy-Construktor:

    Matrix(const Matrix<T, rows, cols, defaultValue>& matrix2){
    }
    

    Hier muss ich ebenfalls einen Default-Wert angeben. Dabei wäre es doch kein Problem, dass man einen Typ, der mit Default-Wert 1.0 angelegt wurde, einem Typ mit Default-Wert 0.0 zuweist.

    Hat jemand eine Idee was ich da machen kann oder muss ich auf den Default-Wert verzichten?

    Danke!

    mfg



  • defaultvalue ist bei dir ein Typ, da muss nur der Typ übereinstimmen, wo ist das problem?


  • Mod

    ein template ctor oder ein konvertierungs-operator (eher schlecht) lösen das problem:

    template<T otherDefaultValue>
    Matrix(const Matrix<T, rows, cols, otherDefaultValue>& matrix2) { /* ... */ }
    

    wenn ein selbstdefinierter copy-ctor erforderlich ist, so musst du ihn trotzdem zusätzlich definieren, denn ein template ctor ist niemals ein copy-ctor.


Log in to reply