Quando devo usar a palavra-chave "typename" ao usar modelos
Ultimamente, tenho trabalhado em um projeto pequeno e não consegui descobrir algo.
Recebi um arquivo .h que continha uma classe, usando um modelo de nome de tipo. Dentro dessa aula havia uma aula particular.
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
};
};
O problema ocorreu quando eu quis definir as funções da classe "Something"
Aqui está como eu estava fazendo isso (em um arquivo .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
}
Portanto, a parte de erros estava na parte de definições ... Preciso informar ao compilador que o tipo de retorno (neste caso, Nó *) usa o modelo de nome de tipo (assim:typename Node*
)? E o parâmetro?typename const Node&
?
Então, basicamente, quando devo especificar se a função / parâmetro usa um modelo?
Obrigado pelo seu tempo.