Правильное объявление классов, унаследованных от шаблона класса - PullRequest
2 голосов
/ 27 марта 2012

Я немного озадачен тем, как правильно объявить класс, унаследованный от класса шаблона.

Базовый класс выглядит так (не считая ненужных битов):

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 ]

8 голосов
/ 27 марта 2012

Является ли ваш производный класс также шаблоном?

Да:

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

Нет:

class IndexNode : public Node<SomeClassThatSpecializezNode>
{
   //...
}
2 голосов
/ 27 марта 2012

Ну, это зависит. Если ваш унаследованный класс использует класс SpecificWriter, вы должны сделать

class IndexNode : public Node<SpecificWriter>
{
};

Если otoh ваш унаследованный класс также должен быть шаблонизирован, выполните

template <typename Writer>
class IndexNode : public Node<Writer>
{
};
2 голосов
/ 27 марта 2012

Как показано ниже, вам нужно создать экземпляр правильного типа базового класса.

template<class Writer>
class IndexNode: public Node<Writer>
{
};
1 голос
/ 27 марта 2012

Запись

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

, если Writer должен быть аргументом шаблона IndexNode.

Запись

class IndexNode : public Node<Writer>

, если Writer - известный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...