Полиморфизм: полиморфные типы для одного и того же члена - PullRequest
0 голосов
/ 09 мая 2019

Предположим, у нас есть классы 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()) { /* ... */ }
};

Итак, есть ли лучший выбор? Например. указатели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...