side virtual method implementation
От: c-smile Канада http://terrainformatica.com
Дата: 12.02.18 19:38
Оценка:
Есть вот такая иерархия классов

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 простихоспидя. Что еще можно придумать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.