Onde e por que colocar as palavras-chave template e typename em C++?
Olá, colegas! Escrevo em C++ há cerca de um ano, mas os templates ainda me causam dor de cabeça. Especialmente me confundem as palavras-chave `template` e `typename` no contexto de nomes dependentes (dependent names). Eu entendo que elas são necessárias para que o compilador possa interpretar o código, mas quando exatamente colocá-las é um mistério para mim.
Aqui está um exemplo específico que me confunde. Suponha que eu tenha uma classe template de contêiner e queira escrever uma função que receba um iterador desse contêiner e acesse o tipo aninhado `value_type`:
```cpp
#include
template
void processContainer(const Container& c) {
typename Container::const_iterator it = c.begin();
// ... fazemos algo com o iterador
}
```
Aqui eu tenho que escrever `typename` antes de `Container`...