2017-03-25 1 views
0

Ich habe eine constexpr Template-Funktion, die Radianten in Grad umwandelt, und eine ähnliche, die Grad in Radiant konvertiert. Wenn ich jedoch einen float in die Funktion übergebe, erhalte ich einen Fehler wegen Konvertierungen, die besagen, dass ich einen const float nicht in einen float konvertieren kann. Ich habe dieses Problem gelöst, indem ich eine andere Funktionsüberladung erstellt habe, um const float als Parameter zu akzeptieren. Gibt es eine Möglichkeit, die Funktion mit beiden Typen arbeiten zu lassen und gleichzeitig die Möglichkeit zu erhalten, viele Variablentypen in die Funktion einzufügen?Probleme mit der Typkonvertierung in der constexpr Template-Funktion

template<typename T> constexpr float radToDeg(const T& rad) 
{ 
    return reinterpret_cast<float>(rad) * static_cast<float>(180.f/PI); 
} 

constexpr float radToDeg(const float& rad) 
{ 
    return rad * static_cast<float>(180.f/PI); 
} 
+1

Wissen Sie, was 'reinterpret_cast' ist und was es ist? –

+0

conexpr float radToDeg (const float & rad) kann nicht kompiliert werden, da rad nicht eigentlich eine Kompilierzeitkonstante ist, sondern ein Laufzeitparameter, der mit dem Modifizierer "const" übergeben wird. Das ist nicht das Gleiche wie ein Const-Wert für die Kompilierzeit. –

+0

Es kompiliert Datei und funktioniert. Soweit reinterpret_cast ja, verstehe ich, was es tut und weiß, dass es const nicht ändern kann, wie const_cast dafür ist ... Allerdings suche ich nach einem pro-Weg, dies zu tun, ohne die Funktion zu überlasten. –

Antwort

0

Das ist nicht, was reinterpret_cast für ist.

template<typename T> constexpr float radToDeg(const T& rad) { return static_cast<float>(rad) * static_cast<float>(180.f/PI); }

Verwandte Themen