2017-03-25 16 views
0

私はラジアンを度に変換するconstexprテンプレート関数と、度をラジアンに変換する同様の関数を持っています。しかし、関数にfloatを渡すと、const floatをfloatに変換できないという変換が原因でエラーが発生します。私はパラメータとしてconst floatを受け入れるために別の関数のオーバーロードを作成することでこの問題を解決しました。関数に多くの変数型を挿入する機能を維持しながら、両方の型で関数を機能させる方法はありますか?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

あなたは 'reinterpret_cast'があり、それがために何が何を知っていますか? –

+0

radは実際にはコンパイル時定数ではないので、constexpr float radToDeg(const float&rad)はコンパイルできません。これは、 "const"修飾子で渡される実行時パラメータです。これは実際のコンパイル時のconst値と同じではありません。 –

+0

ファイルをコンパイルして動作します。限りreinterpret_castはい、私はそれが何を理解し、const_castはそのためのconstを変更することはできません知っている...しかし、私はいくつかのプロの方法は、関数をオーバーロードせずに行うために探しています。 –

答えて

0

これは、reinterpret_castが対象ではありません。

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

関連する問題