有没有更好的方法来完成以下工作?将模板类型与常数值比较
我有一个载体类,具有以下功能:
template <typename T>
bool Vector3<T>::IsUnitVector() const
{
return IsAlmostEqual(this->GetLength(), One<T>::Value());
}
由于T可以是浮动或双(我使用显式模板实例化,以确保只有这些类型的支持),我已经必须创建一个辅助类,它返回值1,在正确的类型:
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; }
};
这是不是太糟糕,直到我意识到我需要创建一个Zero
类以及其他的比较。所以我的问题是,有没有更好的方法来实现这一目标?
我觉得这很常见。你是否试图在“One”的非专业版本中说'return 1;'?我认为这会通过隐式转换来实现。 –
leemes
我做了,但因为IsAlmostEqual是模板化的,所以编译器不知道要使用哪种类型(因为int可以转换为float,double等)。 –