我对如何正确声明从模板类继承的类感到困惑。
基类看起来如此(不包括不相关的位):
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
{...}
,可能认为模板必须显式附加到基类。我想而不是继续采取正确的组合,我会寻求帮助,并希望了解一些能让我理解其原因的东西。
谢谢!
答案 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
是已知类。