从模板类继承的类的正确声明

Proper Declaration of Classes Inherited from Template Class

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

我对如何正确声明从模板类继承的类有点困惑。

基类看起来是这样的(不包括不相关的位):

template <class Writer>
class Node
{
    Writer* writer;
    ...
public:
    Node (std::string& root);
...
}

声明和构造this的继承类的正确方法是什么?我想的是:

template <class Writer>
class IndexNode : public Node
{...}

然而,这样做给了我"expected class-name before '{' token"。我试着在继承类中注释掉模板声明,认为模板声明本身可能是从父级继承的,但这也没有帮助,还尝试了

class IndexNode : template <class Writer> public Node
{...}

,认为模板可能必须显式地附加到基类。我想,与其继续尝试正确的组合,我宁愿寻求帮助,希望能学到一些东西,让我理解为什么。

谢谢!

您的派生类也是一个模板吗?

是:

template <class Writer>
class IndexNode : public Node<Writer>
{
   //...
}

否:

class IndexNode : public Node<SomeClassThatSpecializezNode>
{
   //...
}

您需要实例化正确的基类类型,如下所示。

template<class Writer>
class IndexNode: public Node<Writer>
{
};

这取决于情况。如果您继承的类使用SpecificWriter类,您将执行

class IndexNode : public Node<SpecificWriter>
{
};

如果您继承的类也应该模板化,请执行

template <typename Writer>
class IndexNode : public Node<Writer>
{
};

写入

template<class Writer>
class IndexNode : public Node<Writer>

如果Writer应该是IndexNode的模板参数。

写入

class IndexNode : public Node<Writer>

如果CCD_ 3是已知类。