gpt4 book ai didi

c++ - 将模板类型与常量数值进行比较

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:10 24 4
gpt4 key购买 nike

是否有更好的方法来执行以下操作?

我有一个 vector 类,具有以下功能:

template <typename T>
bool Vector3<T>::IsUnitVector() const
{
return IsAlmostEqual(this->GetLength(), One<T>::Value());
}

由于 T 可以是 float 或 double(我使用显式模板实例化来确保只支持这些类型),我必须创建一个辅助类,它以正确的类型返回值 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 类来进行其他比较。所以我的问题是,是否有更好的方法来实现这一目标?

最佳答案

return IsAlmostEqual(this->GetLength(), static_cast<T>(1));

小的非负整数值应该都可以由每种数字类型精确表示,因此只需 static_cast 转换为所需的类型就足够了。

或者,假设 IsAlmostEqual 是一个静态成员函数,它有两个 T 类型的参数(例如 IsAlmostEqual(T lhs, T rhs)), 只需让编译器在函数调用中自动执行转换即可:

return IsAlmostEqual(this->GetLength(), 1);

关于c++ - 将模板类型与常量数值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com