如何解决定义模板类的静态const变量
| 我有一个向量类,其中包含一些静态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)上对其进行了测试,并且可以正常编译并通过了测试,但是我想知道这是否是非标准代码。
解决方法
不,那是完全合法且完全标准的。如果要在模板化类中使用静态变量,则无法定义它的所有可能实例化-这些类型甚至都不能命名,因此可以专门化。因此,模板类必须为所有可能的用途定义静态变量是非常必要的。
, 没关系。
模板是一种告诉编译器针对不同类型生成相似代码的方式。
这正是它的目的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。