Ошибка шаблона множественного наследования неоднозначного символа

У меня есть реальная проблема, которая может быть обобщена следующим образом:

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);

Я хочу вызвать функцию deleteType в классе ChildClass, но без какого-либо объявления функция будет вызываться в ParentClass.

Как я могу избавиться от неоднозначной ошибки символа в фразе использования? Можно ли выполнить мою задачу с другим подходом?

К вашему сведению: Первоначально я пытался вызвать функцию с (ничего не меняется)

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

забавная вещь: это все еще компилируется, хотя имеет красное подчеркивание. Если я отлаживаю, шаблон будет по-прежнему вызываться в ParentClass, при компиляции не будет ни предупреждений, ни ошибок.

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);
}
Другие вопросы по тегам