Недавно я работал над небольшим проектом, и я не мог кое-что понять.
Мне дали файл .h, содержащий класс с использованием шаблона имени типа. Внутри этого класса был частный класс.
template <typename T>
class Something
{
public:
Something();
~Something();
Node* Function1(int index);
int Index(const T& id);
private:
class Node()
{
public:
T id;
//Imagine the rest for the Node
};
};
Проблема возникла, когда я хотел определить функции класса «Что-то».
Вот как я это делал (в файле .inl)
template<typename T>
Node* Something::Function1(int index) //Is the return type well written?
{
// returns the node at the specified index
}
template<typename T>
int Something::Index(const T& id) //Is the parameter type well specified?
{
// returns the index of the node with the specified id
}
Итак, часть ошибок была в части определений... Должен ли я сообщать компилятору, что возвращаемый тип (в данном случае Node*) использует шаблон имени типа (например: typename Node*
)? А что с параметром? typename const Node&
?
Итак, когда мне нужно указать, использует ли функция/параметр шаблон?
Спасибо за ваше время.