Множественное наследование и гетерогенная коллекция - PullRequest
1 голос
/ 01 марта 2012

У меня есть три класса, которые наследуются от whirlyB и gameCreature. Я использую все три подкласса в коллекции gameCreatures. Есть ли способ использовать унаследованную функциональность от whirlyB. Мне предоставляется только выбор использования gameCreature функций. Что я должен сделать, чтобы получить функциональность whirlyB?

1 Ответ

2 голосов
/ 01 марта 2012

Вот глупая идея, для случая, когда вы застряли с одним из базовых указателей, но можете свободно изменять классы. Предположим, у нас есть:

struct InBetween : Rock, HardPlace { /* ...  */ }

и предположим, что у вас есть только Rock -показатели. Изменить Rock следующим образом:

struct Rock
{
    virtual HardPlace * get_other() const = 0;
    // ...
};

Теперь добавьте к каждому производному классу следующее:

struct InBetween : Rock, HardPlace
{
    virtual HardPlace * get_other() const { return this; }
    // ...
};

Теперь, учитывая Rock * r, вы можете сказать HardPlace * h = r->get_other().

Я бы не стал называть это хорошим дизайном или даже рекомендовать его, но я думаю, что это буквальный ответ на ваш вопрос.

...