模板类如何从嵌套模板类继承

How can a template class inherit from a nested template class

本文关键字:继承 嵌套      更新时间:2023-10-16

考虑以下代码:

template<class C, class P>
//class Cchild : public C::NestedClass              // Works
class Cchild : public C::NestedTemplateClass<P>     // Fails : how to inherit from nested template class defined in C ?
{
};

编译器在模板类Cchild继承嵌套类C::NestedClass时编译得很好。但是,如果我想要Cchild从嵌套的模板类C::NestedTemplateClass<P>继承,则无法编译

语法为:

template<class C, class P>
class Cchild : public C::template NestedTemplateClass<P>
{
};

来自gcc的错误信息实际上是相当可读的:

t.C:3:26: error: non-template ‘NestedTemplateClass’ used as template
 class Cchild : public C::NestedTemplateClass<P>
                          ^~~~~~~~~~~~~~~~~~~
t.C:3:26: note: use ‘C::template NestedTemplateClass’ to indicate that it is a template