J'ai une situation réelle qui peut se résumer dans l'exemple suivant:Ambigu héritage multiple de classes de modèle
template< typename ListenerType >
struct Notifier
{
void add_listener(ListenerType&){}
};
struct TimeListener{ };
struct SpaceListener{ };
struct A : public Notifier<TimeListener>
, public Notifier<SpaceListener>
{
};
struct B : TimeListener{ };
int main()
{
A a;
B b;
a.add_listener(b); // why is ambiguous?
return 0;
}
Pourquoi n'est pas évident au compilateur que B
est un TimeListener
, et donc le seul possible la résolution de surcharge est Notifier<TimeListener>::add_listener(TimeListener&)
?
Vous pouvez résoudre vos problèmes avec 'l'aide notificateur :: add_listener; '(et l'autre) dans' struct A'. [Démo] (http://coliru.stacked-crooked.com/a/6e43848691a4cfcb) –
Jarod42