我有一個真實的情況,可以在下面的例子來概括:曖昧多重繼承
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;
}
爲什麼不明顯的編譯器B
是TimeListener
,因此唯一可能重載分辨率是Notifier<TimeListener>::add_listener(TimeListener&)
?
您可以用'使用通知解決您的問題:: add_listener;'(另一個)在'struct A'中。 [Demo](http://coliru.stacked-crooked.com/a/6e43848691a4cfcb) –
Jarod42