模板多重继承ambigious符号错误

时间:2016-05-08 14:50:15

标签: c++ templates inheritance crtp

我遇到了一个真正的问题,可以概括为:

template <typename BaseType>
class TemplateClass
{
public:
    template <typename BaseTypee, unsigned PrefixID>
    static void deleteType(unsigned int ObjID)
    {

    }
};

class ParentClass:
    public TemplateClass<ParentClass>
{
};

class ChildClass:
      public ParentClass, public TemplateClass<ChildClass>
{   
    using TemplateClass<ChildClass>::deleteType; //Ambigious Symbol Compiler-Error

};

我像这样调用函数deleteType

TemplateClass<ChildClass>::deleteType<ChildClass, ChildType>(ChildType);

我想在 ChildClass 类中调用函数 deleteType ,但没有任何声明,该函数将在 ParentClass 中调用。

如何摆脱使用短语中的暧昧符号错误?可以用不同的方法完成我的任务吗?

仅供参考:原来,我尝试用(没有任何改变)调用该功能

ChildClass::deleteType<ChildClass, ChildType>(ChildType);
有趣的是:尽管有一个红色的下划线,它仍然可以编译。如果我调试,模板仍将在 ParentClass 中调用,在编译时没有警告也没有抛出错误..

1 个答案:

答案 0 :(得分:1)

using声明放在public:部分:

template <typename BaseType>
class TemplateClass
{
public:
    template <typename BaseTypee, unsigned PrefixID>
    static void deleteType(unsigned int ObjID)
    {
    }
};

class ParentClass:
    public TemplateClass<ParentClass>
{
};

class ChildClass:
      public ParentClass, public TemplateClass<ChildClass>
{   
public:
    using TemplateClass<ChildClass>::deleteType;
};

int main() {
    ChildClass::deleteType<void, 0>(0);
}
相关问题