Я преобразовываю некоторые из своих математических классов в шаблоны и использую списки инициализации и сталкиваюсь с проблемой, когда унаследованный класс нуждается в доступе к элементам данных базового класса при инициализации.C++ Унаследованные классы шаблонов и списки инициализации
Вот код:
template <typename T>
struct xCoord2
{
T x;
T y;
xCoord2(T _x, T _y) : x(_x), y(_y) {};
};
template <typename T>
struct xCoord3 : xCoord2<T>
{
typedef xCoord2<T> B;
T z;
// All Error
xCoord3(T _x, T _y, T _z) : x(_x), y(_y), z(_z) {};
xCoord3(T _x, T _y, T _z) : B::x(_x), B::y(_y), z(_z) {};
xCoord3(T _x, T _y, T _z) : this->x(_x), this->y(_y), z(_z) {};
// Works
xCoord3(T _x, T _y, T _z) { B::x = 0; B::y = 0; z = 0; };
};
Можно ли использовать списки инициализации на унаследованных классов?
Является ли 'xCoord3' действительно' xCoord2'? Или они просто разделяют определенные данные? Это случай, когда наследование не может быть хорошей идеей, если нет отношения is-a между этими двумя классами. –
Пример - это только часть каждого класса, но наследование здесь очень полезно, так как оно допускает математику между двумя типами. –