S' j'ai bien compris ton problème, tu es dans ce cas:
Code C/C++ :
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);
[...]
};
et tu aimerais pouvoir écrire
Code C/C++ :
A1 a1();
A2 a2();
B1 b1();
b1.f(a1);
b1.f(a2);
Ca ressemble a un problème typique de polymorphisme...
Sauf erreur, il n'y a pas de solution directe, par contre c'est tout à fait possible au moyen d'un pointeur...
Dans ce cas, le prototype de f doit être:
Code C/C++ :
qui peut recevori des pointeurs vers des objets de type A ou tout type héritant de A. Il faut par contre faire attention si tu veux récupérer l'objet de base (i.e. caster ton pointeru vers un A1* ou un A2*) que le pointeur pointe vers un objet du bon type...