c++ - 如何定义模板类的 static const 变量

标签 c++ templates constants static-members

我正在尝试使用预定义的向上、向右和向前的静态常量创建一个 vector 类,因为这些在所有情况下都应该相同。这应该如何定义?这是否可能?

我正在尝试做这样的事情:

template <class T> class vec3
{
public:
    vec3(T x = 0, T y = 0, T z = 0) :
        x(x),
        y(y),
        z(z)
    {
    }

    static const vec3<T> right;
    static const vec3<T> up;
    static const vec3<T> forward;

    T x, y, z;
}

cpp:

#include "vec3.h"

template <typename T>
const vec3<T>::right(1, 0, 0);

template <typename T>
const vec3<T>::up(0, 1, 0);

template <typename T>
const vec3<T>::forward(0, 0, 1);

这会导致语法错误。

最佳答案

应该是(全部在 header 中(如果您想将声明与定义分开,可以使用 .inl 或 .hxx)):

template <class T> class vec3
{
public:
    vec3(T x = 0, T y = 0, T z = 0) :
        x(x),
        y(y),
        z(z)
    {
    }

    static const vec3 right;
    static const vec3 up;
    static const vec3 forward;

    T x, y, z;
};

template <typename T> const vec3<T> vec3<T>::right(1, 0, 0);
template <typename T> const vec3<T> vec3<T>::up(0, 1, 0);
template <typename T> const vec3<T> vec3<T>::forward(0, 0, 1);

Demo

关于c++ - 如何定义模板类的 static const 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34026555/

相关文章:

c# - c++和c#之间通过管道进行通信

javascript - 无法调用未定义 Handlebars 问题的方法 'match'

c++ - 避免虚拟模板函数

function - 在 if 语句中使用函数 return 或在 go 模板中使用变量

c++ - const 对象的复制构造函数

java - 如何使用 JNI 创建 native 类?

c++ - 我们可以像这样初始化一个 C++ 对象吗?

c++ - 你如何将一个函数传递给另一个函数。提示和指示?

c++ - 成员函数如何传递 "this"指针

java - 如何在 Java 中实现常量