Например, у меня есть базовый базовый класс A
и B
. A
имеет виртуальный метод следующимДва сложенных полиморфизма странно, как сделать его расширяемым?
class A
{
public:
virutal void f(B& b) = 0;
};
Для класса А1
class A1 : public A
{
public:
void f(B& b) override { b.f(A1); }
};
и, таким образом для B
, он нужен виртуальный метод f(A1)
class B
{
public:
virtual void f(A1& a) = 0;
};
И в class B1 : public B
, виртуальный метод реализованы. Проблема в том, что когда добавляется еще один class A2 : public A
, я должен добавить виртуальный метод virtual void f(A2& a) = 0
в классе B
, который, как я думаю, разбивает код, потому что я не знаю, добавляется ли A2
даже A1
или нет, когда я проектирую класс B
. Как избежать этого, но реализовать эквивалентные требования? Любая функция C++ может использоваться даже с шаблонами.
Чего вы действительно хотите достичь? –