Richtigen Typ aussuchen als Funktion eines anderen Typs zur Compile-Zeit



  • Hallo,
    gibt es irgendeine Möglichkeit zur Compile-Zeit einen Typen als Funtion eines anderen Typen zu generieren?

    Etwas genauer:
    Wenn ich Typ A habe, soll Typ AX generiert werden,
    wenn ich Typ B habe soll Typ BX generiert werden, etc. (die Typnamen sind nur Beispiele bzw Platzhalter)
    äquivalent zu einer switch-case Anweisung mit Typen.
    Und eben zur Compile-Zeit.

    also Beispiel:
    Angenommen ich will folgende Funktionen automatisch generieren:

    AX myfunc(A foo) {
        return AX(A);  //Nur Beispiel
    }
    

    für viele A,AX,B,BX,C,CX,...

    Natürlich kann ich folgende allgemeine Template Funktion angeben:

    template <typenname T, typenname TX>
    TX myfunc(T foo) {
        //...
    }
    

    Aber die Sache ist eben dass TX eindeutig von T abhängt.
    Ich habe also eine Tabelle mit den T -> TX.
    Wie kann ich das dem Compiler rüberbringen?



  • Hm, bin kein Template-Experte, aber so ginge es zum Beispiel:

    template <typename T> struct convertType {};
    template <> struct convertType<int> { using type = float; };
    template <> struct convertType<char> { using type = double; };
    // hier weitere Typen einfügen
    template <typename T> using convertType_t = typename convertType<T>::type;
    
    (...)
    
    convertType_t<int> a; // a ist nun ein float
    convertType_t<chat> b; // b ist nun ein double
    

Anmelden zum Antworten