Я пытаюсь написать класс в качестве упражнения и иметь следующее:
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
будут объединены во время ссылки.
удалите статическое объявление из класса:
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...