Установить статический класс

Я пытаюсь написать класс в качестве упражнения и иметь следующее:

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 в начале программы. Как мне это сделать?

0

Решение

То, что вы сделали, хорошо, но вы, вероятно, получаете ошибку компоновщика, поскольку не предоставляете хранилище для 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 будут объединены во время ссылки.

2

Другие решения

удалите статическое объявление из класса:

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...
1

По вопросам рекламы [email protected]