我正在尝试使用预定义的静态常量为向上,向右和向前创建一个向量类,因为在所有情况下这些都应该是相同的。应如何定义,甚至可能?
我正在尝试做这样的事情:
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);
这会导致语法错误。
答案 0 :(得分:7)
它应该是(全部在标题中(如果你想从定义中拆分声明,你可以使用.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);
答案 1 :(得分:1)
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);