我想创建一个C ++模板函数,它具有在实现中使用的不同常量,具体取决于模板类型的选择。
#define FLOAT_EPSILON (0.000001f)
#define DOUBLE_EPSILON (0.00000000000001)
template <class T> void func(T params)
{
const T epsilon = ???? // either FLOAT_EPSILON or DOUBLE_EPSILON depending on T
// do some calculations using epsilon
}
template void func(float params);
template void func(double params);
我无法确定如何做到最好,尽管我想到了一些有效的方法。你能帮忙吗?
答案 0 :(得分:4)
您可以使用辅助模板选择epsilon。
template <typename T> struct EpsilonChooser;
template <> struct EpsilonChooser<float>
{
float const value = 0.000001f;
};
template <> struct EpsilonChooser<double>
{
double const value = 0.00000000000001;
};
template <class T> void func(T params)
{
const T epsilon = EpsilonChooser<T>::value;
// do some calculations using epsilon
}
答案 1 :(得分:3)