簡體   English   中英

正確聲明從模板類繼承的類

[英]Proper Declaration of Classes Inherited from Template Class

我對如何正確聲明從模板類繼承的類感到困惑。

基類看起來像這樣(不包括不相關的位):

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
{...}

,思考可能必須將模板顯式附加到基類。 我想而不是繼續采取正確的組合,我會尋求幫助,並希望了解一些能讓我理解其原因的東西。

謝謝!

您的派生類也是模板嗎?

是:

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>
{
};

如果otoh你的繼承類也應該被模板化了

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

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

如果Writer應該是IndexNode的模板參數。

class IndexNode : public Node<Writer>

如果Writer是一個已知的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM