У меня есть два класса Foo и Bar с избыточными членами. Мне нужен FooBar третьего класса, который содержит члены обоих типов, которые я могу передать в функции, ожидающие любого типа (возможно, с литой) и не иметь двух копий всего, что плавает.Наследование C++, члены и избыточные данные
class Foo{
public:
A a;
B b;
C c;
};
class Bar{
A a;
B b;
D d;
};
class FooBar{
A a;
B b;
C c;
D d;
};
В C++ есть в любом случае сделать это без изменения кода, который использует А или В (или в лучшем случае изменения типов, которые ожидает код) и без лишних копий или сохранения избыточных данных? Простое наследование поддерживает повторяющиеся данные. Наличие общего базового класса и виртуального наследования компилируется под clang, но, похоже, не работает.
Как насчет использования союза? – Pradhan
Если вы хотите передать 'FooBar' функциям, которые ожидают' Foo' или 'Bar', вам понадобится использовать наследование. – Cornstalks
Я думаю, что дизайн испорчен. Классы должны моделировать поведение, а не только данные. – Jens