Скажите, у меня есть класс:
class B;
class A{
public:
A();
virtual B foo();
}
определено в стороннем компоненте. Я хочу обернуть классы A и B, в результате myA и myB.
Теперь я не должен иметь доступ к классу A и классу B извне, а скорее иметь одинаковую функциональность для myA и myB. Функция foo () может быть вызвана из стороннего модуля.
Я бы предпочел сделать это, используя наследование, а не инкапсуляцию.
Итак, есть 2 проблемы:
- Вызов a-> myFoo () (необходимо переименовать методы из-за одинаковой сигнатуры и другого возвращаемого типа) должен вызывать A :: foo (), если a имеет тип myA.
- Вызов a-> myFoo () должен вызвать myA2 :: myFoo (), если a относится к классу типов myA2 :: myA.
Любые предложения о том, как сделать это элегантно? Я придумала несколько решений, но предпочитаю по-новому взглянуть на все это.
EDIT:
Просто теоретический вопрос. На самом деле мне не нужно этого делать, я просто думаю о том, как этого достичь.
EDIT2:
myA2 - это класс, расширяющий myA. До шаблона он назывался A2 (класс, который расширил класс A из стороннего модуля).