常量定义和模板

时间:2015-02-19 00:06:58

标签: c++ templates types casting

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不会降低性能吗?这是最好的解决方案吗?

1 个答案:

答案 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;