如何定义模板的静态常量变量 class
How to define a static const variable of a template class
我正在尝试制作一个带有向上、向右和向前的预定义静态常量的向量 class,因为它们在所有情况下都应该相同。这应该如何定义,甚至可能吗?
我正在尝试做这样的事情:
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);
这会导致语法错误。
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);
应该是(全部在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);
我正在尝试制作一个带有向上、向右和向前的预定义静态常量的向量 class,因为它们在所有情况下都应该相同。这应该如何定义,甚至可能吗?
我正在尝试做这样的事情:
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);
这会导致语法错误。
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);
应该是(全部在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);