テンプレートクラスメソッド内に定数数値リテラルを含めるための解決策を見つけようとしています。float 型または double 型で使用する数学テンプレート クラスをいくつか作成しています。問題は、リテラルがデータ型によって異なることです (たとえば、float の場合は "0.5f"、double の場合は "0.5")。これまでのところ、私は2つの解決策を考え出しています。最初のコードの仮説コード:
template <typename T>
class SomeClass
{
public:
T doSomething(T x);
};
template <>
float SomeClass<float>::doSomething(float x)
{
float y = 0.5f;
/*
* Do computations...
*/
return x;
}
template <>
double SomeClass<double>::doSomething(double x)
{
double y = 0.5;
/*
* Do computations...
*/
return x;
}
上記のアプローチでは、使用されるすべての型のメソッド全体を強制的に書き換えます。
別のアプローチ:
template <typename T>
class SomeClass
{
public:
T doSomething(T x);
private:
T getValue();
};
template <typename T>
T SomeClass<T>::doSomething(T x)
{
T y = getValue();
/*
* Do computations...
*/
return x;
}
template <>
float SomeClass<float>::getValue()
{
return 0.5f;
}
template <>
double SomeClass<double>::getValue()
{
return 0.5;
}
これは、特定の型に対して同じメソッドを複数回記述する必要はありませんが、メソッド内で使用する必要がある「マジック ナンバー」ごとに多くの getValue() メソッドが必要です。
これを解決する別の「よりエレガントな」方法はありますか?