В довольно большом проекте у меня есть класс Parent1
, который наследуется несколькими производными классами. Мне нужно добавить новую реализацию для альтернативной реализации родительского класса. Выбор использования Parent1
или Parent2
будет сделан во время выполнения.
Минимальный пример будет таким, как показано ниже.
текущая настройка
class Parent1 {
void doParentStuff() {
std::cout << 0 << std::endl;
}
};
class Derived : Parent1 {
void doChildStuff() {
doParentStuff();
}
};
Требуемая настройка
Теперь я хочу добавить новый файл, содержащий реализацию Parent2
, который будет выглядеть следующим образом:
class Parent2 {
void doParentStuff() {
std::cout << 1 << std::endl;
}
};
Может быть, я создаю новый класс Parent
, который является базовым классом Parent1
и Parent2
, и в идеале класс Derived теперь должен выглядеть следующим образом:
class Derived : Parent {
Derived( bool whichParent ) {
// decide here whether to inherit from Parent1 or Parent2
}
void doChildStuff() {
doParentStuff(); // this will print 0 or 1, with the choice made at runtime
}
}
Очевидно, что чистым решением было бы изменить дизайн с наследования на композицию. Тем не менее, я пытаюсь сделать эту работу в кратчайшие сроки, с наименьшим количеством дополнительного кода при сохранении структуры наследования. Это вообще возможно?