定义模板类的静态const变量

时间:2011-06-18 16:26:03

标签: c++ templates

我有一个vector类,它有一些静态const变量,如ZERO。现在,因为vector通常被实现为模板类(我的也不例外),我看到了很多代码:

template<> const Vector2<float> Vector2<float>::ZERO;
template<> const Vector2<float> Vector2<float>::UNIT_X(1, 0);
//... and so on, and then all code duplicated for other types (int, double, long double)
// including different sizes of the Vector (Vector2, Vector3, Vector4)

我的问题是,我可以做一些这样的事情,以避免仅为不同的类型重复代码:

template <typename T, unsigned int SIZE>
const Vector<T, SIZE> Vector<T, SIZE>::ZERO;

能满足所有未来类型吗?如果没有,如果我将以下内容明确定义为各种类型的类,它会有所作为:

template Vector<float, 2>;
template Vector<float, 3>;

到目前为止,我已经在Visual C ++(2008)上进行了测试,它编译得很好并且测试通过了,但我想知道这是否是非标准代码。

2 个答案:

答案 0 :(得分:1)

不,这是完全合法的,完全是标准的。如果要在模板化类中使用静态变量,则无法定义所有可能的实例化 - 这些类型甚至可能无法命名,因此可以进行特殊处理。因此,模板类必须具有为所有可能用途定义的静态变量。

答案 1 :(得分:0)

没关系。

模板是一种告诉编译器为不同类型生成类似代码的方法 这正是它的用途。