我正在尝试编写一个类(class)作为练习,并具有以下内容:
template <class Foo>
class Bar
{
protected:
Foo _x,_y,_z;
public:
Bar(Foo x, Foo y, Foo z) {_x=x; _y=y; _z=z;};
Bar() {_x=0; _y=0; _z=0;};
static const Bar<Foo> X;
};
我想将 X
初始化为 (0,1,0)
但不知道该怎么做。我想声明 X =(0,1,0)
就像在程序开始时声明 #define pi = 3.142
一样。我应该怎么做?
最佳答案
您所做的一切都很好,但您可能会遇到链接器错误,因为您没有为 X
提供任何存储空间| .你需要这样做:
template <class Foo>
class Bar
{
protected:
Foo _x,_y,_z;
public:
Bar(Foo x, Foo y, Foo z) {_x=x; _y=y; _z=z;};
Bar() {_x=0; _y=0; _z=0;};
static const Bar<Foo> X;
};
template <typename Foo>
const Bar<Foo> Bar<Foo>::X(0, 1, 0);
与非模板静态变量不同,这可以放在标题中——与其他模板一样,Bar<Foo>::X
的重复定义将在链接时合并。
关于c++ - 设置类静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20558065/