2017-03-25 1 views
0

J'ai une fonction de modèle constexpr qui convertit les radians en degrés, et une fonction similaire qui convertit les degrés en radians. Cependant, lors de la transmission d'un flottant dans la fonction, j'obtiens une erreur à cause des conversions indiquant que je ne peux pas convertir un flottant const en float. J'ai résolu ce problème en créant une surcharge de fonction différente pour accepter flo float en tant que paramètre. Y at-il un moyen de faire fonctionner la fonction avec les deux types tout en conservant la possibilité d'insérer de nombreux types de variables dans la fonction?Problème avec la conversion de type dans la fonction de modèle constexpr

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

Savez-vous ce 'reinterpret_cast' est et ce qu'il est pour? –

+0

constexpr float radToDeg (const float & rad) ne peut pas compiler, car rad n'est pas une constante à la compilation, c'est un paramètre d'exécution qui est transmis avec le modificateur "const". Ce n'est pas la même chose qu'une vraie valeur de const de compilation. –

+0

Il compile le fichier et fonctionne. En ce qui concerne reinterpret_cast oui, je comprends ce qu'il fait et je sais qu'il ne peut pas changer const comme const_cast est pour ça ... Cependant, je suis à la recherche d'un moyen pro de le faire sans surcharger la fonction. –

Répondre

0

Ce n'est pas ce que reinterpret_cast est pour.

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