我尝试编写一些用于多重继承的通用代码。 以下是代码摘要:
struct Type {};
template <class T>
class OOPPolymorphic {
friend T;
void RegisterInheritence(const Type* base) {}
public:
static const Type* GetType() {
return thisType;
}
virtual const Type* MyType() = 0;
};
class Base :public OOPPolymorphic<Base> {
public:
virtual const Type* MyType() {
return OOPPolymorphic<Base>::GetType();
}
};
class Derived : public Base, public OOPPolymorphic<Derived> {
public:
Derived() {
OOPPolymorphic<Derived>::RegisterInheritence(Base::GetType());
}
virtual const Type* MyType() {
return OOPPolymorphic<Derived>::GetType();
}
};
类Base编译没有错误,但在类Derived中我得到歧义错误:
'OOPPolymorphic' is ambiguous '
Candidates are:
OOPPolymorphic(const OOPPolymorphic<Base> &)
OOPPolymorphic()
OOPPolymorphic(const OOPPolymorphic<Derived> &)
OOPPolymorphic()
我真的不明白为什么会这样。我读到我可以写&#34;使用...&#34;在Derived中修复它,但我必须假设它没有,因为它是功课(我不知道模板的使用是什么)。 有人知道为什么它含糊不清? 谢谢!