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

时间:2012-03-27 13:03:19

标签: c++ templates inheritance

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

基类看起来如此(不包括不相关的位):

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

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

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

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

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

,可能认为模板必须显式附加到基类。我想而不是继续采取正确的组合,我会寻求帮助,并希望了解一些能让我理解其原因的东西。

谢谢!

4 个答案:

答案 0 :(得分:8)

您的派生类也是模板吗?

是:

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

否:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

那取决于。如果您继承的类使用了SpecificWriter类,那么您将执行

class IndexNode : public Node<SpecificWriter>
{
};

如果otoh你的继承类也应该被模板化

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

答案 3 :(得分:1)

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

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

class IndexNode : public Node<Writer>

如果Writer是已知类。