ExpertiDict

C++ · Intermediário · Inglês · Técnico

typename

ˈtaɪp.neɪmpalavra-chave

Palavra-chave usada em templates para declarar parâmetros de tipo e para avisar o compilador de que um nome dependente, como T::value_type, é um tipo e não um valor.

Onde usar

Surge ao escrever templates que usam tipos aninhados de parâmetros, como typename T::iterator. Sem a palavra, o compilador acusa erro, pois assume que o nome é um valor; desde o C++20 ela é opcional em alguns contextos.

Em código

template <typename C>
void primeiro(const C& c) {
  typename C::const_iterator it = c.begin();
  std::cout << *it;
}

Exemplos

You need typename before T::iterator here.

Você precisa de typename antes de T::iterator aqui.

Without typename the compiler thinks value_type is a value.

Sem typename o compilador acha que value_type é um valor.

Cuidado

No parâmetro do template, typename e class são equivalentes; a diferença só importa para nomes dependentes.

Veja também

Todos os termos de C++