class A{ [...] }; class A1 : public A{ [...] }; class A2 : public A{ [...] }; class B{ [...] }; class B1 : public B{ public T f(A a); [...] }; class B2 : public B{ public T f(A a); [...] };
A1 a1(); A2 a2(); B1 b1(); b1.f(a1); b1.f(a2);
public T f(A* a);