Предположим, у нас есть классы Derived*
(здесь *
означает отличительные суффиксы), которые являются производными от класса Base
. Теперь член должен быть добавлен в класс Base
, тип которого должен наследоваться по-другому от своего собственного типа в производных классах. Это может быть представлено следующим образом (по логике) в c ++:
class Base {
protected:
BaseType m_member;
};
class Derived1 : Base {
DerivedType1 m_member; // this member should be the same member in base class
};
class Derived2 : Base {
DerivedType2 m_member;
};
class BaseType {
protected:
virtual void foo();
};
class DerivedType1 : BaseType { ... };
class DerivedType2 : BaseType { ... };
Здесь m_member
в Derived1
означает ровно m_member
в Base
, только с измененными типами (и даже новый тип наследуется от старого типа). Я знаю, что этот кусок кода не делает то, что мне нужно (здесь m_member
в каждом классе вообще не связаны друг с другом), что мне нужно делать?
Я рассмотрел использование boost::static_visitor
(и без создания новых классов для Base
) для этого случая. Однако производные классы должны быть классами.
Теперь мое временное решение этой проблемы состоит в том, что производные классы содержат этот член того же типа, что и базовые классы, но обрабатывают этот член по-разному. Источник:
class Base {
protected:
BaseType m_member;
};
class Derived1 : Base {
public:
Derived1() :
m_member(DerivedType1()) { /* ... */ }
};
Итак, есть ли лучший выбор? Например. указатели?