以下のより良い方法がありますか?テンプレートの型と定数の値の比較
私は次の関数で、ベクトルクラスを持っている:
template <typename T>
bool Vector3<T>::IsUnitVector() const
{
return IsAlmostEqual(this->GetLength(), One<T>::Value());
}
Tがfloatまたはdouble(私は、これらのタイプがサポートされていることを確認するために、明示的なテンプレートのインスタンスを使用しています)、私はきたことができるように正しいタイプで、1の値を返すヘルパークラスを作成する必要がありました:私は、私は他の比較のためにもZero
クラスを作成する必要が実現するまで
template <typename T>
struct One
{
static T Value();
};
template <>
struct One<int>
{
static int Value() { return 1; }
};
template <>
struct One<float>
{
static float Value() { return 1.0f; }
};
template <>
struct One<double>
{
static double Value() { return 1.0; }
};
これはそれほど悪くはなかったです。だから私の質問は、これを達成するためのより良い方法はありますか?
これは非常に一般的だと思います。 'One'の非特化版で 'return 1;'と言うだけですか?私はこれが暗黙の変換のおかげでそれを行うと思います。 –
leemes
私はしましたが、IsAlmostEqualがテンプレート化されているため、コンパイラはどのタイプを使うべきかわかりません(intはfloat、doubleなどに変換できるため)。 –