Есть вот такая иерархия классов
class AbstractFoo {
virtual int do_something() = 0;
}
class Manipula {}
class Bar : public AbstractFoo, public Manipula {}
class Zap : public AbstractFoo, public Manipula {}
Понятно что все классы выше являются абстрактными.
Теперь нужно соорудить Concrete Bar и Zap добавив к ним имплементацию int do_something()
Наивный подход примерно такой:
#if WINDOWS
class AbstractFooImpl {
int do_something() { return 0; }
}
#elif MACOS
...
#endif
class ConcreteBar : public Bar, AbstractFooImpl {}
class ConcreteZap : public Zap, AbstractFooImpl {}
но он не работает, т.к. AbstractFoo::do_something() и AbstractFooImpl::do_something() есть разные сущности.
Каким образом это сделать более кошерно ?
Пока два варианта видится : virtual inheritance и #define простихоспидя. Что еще можно придумать?