Jim为数学用法编写了一些模板类,例如vector 2d。 我想为我的班级定义一个常量向量:UnityX:
template <typename T>
class Vector2 {
public:
...
static Vector2 UnityX();
...
T x,y;
};
我不知道如何实施它,因为如果我这样做:
template <typename T>
Vector2<T> Vector2<T>::UnityX()
{
return Vector2(1, 0);
}
在隐式类型转换的编译原因中我会有一些警告。警告来自VS2013的C4244:&#39;转换&#39;转换为&#39; type1&#39;到&#39; type2&#39;,可能会丢失数据。
为了解决这个问题,我试试:
template <typename T>
Vector2<T> Vector2<T>::UnityX()
{
return Vector2(static_cast<T>(1.0), static_cast<T>(0.0));
}
使用此解决方案,我在编译期间没有更多警告,但static_cast不会降低性能吗?这是最好的解决方案吗?
答案 0 :(得分:0)
如果你想拥有常量矢量类型,可以让它们成为类的静态成员:
template <typename T>
class Vector2
{
public:
Vector2(const T& x, const T& y) : x(x), y(y) {}
protected:
T x, y;
public:
static const Vector2<T> UnitX;
};
template <typename T>
Vector2<T> Vector2<T>::UnitX = Vector2<T>(1, 0);
现在使用它很简单,不需要函数调用。
Vector2<float> unitX = Vector2<float>::UnitX;