设置一个静态类

时间:2013-12-13 02:27:55

标签: c++ class templates variable-declaration

我正在尝试将课程作为练习编写并具有以下内容:

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一样。我应该怎么做呢?

2 个答案:

答案 0 :(得分:2)

您所做的很好,但由于您没有为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的重复定义将在链接时合并。

答案 1 :(得分:1)

从类中删除静态声明:

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;};
};


const Bar<Foo> X(0,1,0); // Foo should be a type...