【发布时间】:2016-03-08 17:29:08
【问题描述】:
我有一个真实的情况,可以用下面的例子来概括:
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& )?
【问题讨论】:
-
您可以在
struct A中使用using Notifier<TimeListener>::add_listener;(和另一个)解决您的问题。 Demo
标签: c++ multiple-inheritance overload-resolution name-lookup template-classes