Se eu puder fazer o seguinte:
template <typename T = int>
class Foo{
};
Por que não estou autorizado a fazer o seguinte em principal?
Foo me;
Mas devo especificar o seguinte:
Foo<int> me;
O C ++ 11 introduziu argumentos de modelo padrão e, no momento, eles estão sendo esquivos para meu entendimento completo.
Foo
pode ser um identificador modelo ou pode ser uma instanciação explícita, dependendo se há um argumento padrão. Melhor manter a sintaxe de instanciação explícita. Pense nisso como uma funçãofoo
com um único parâmetro padrão. Você não pode chamá-lo assimfoo
, você pode chamá-lo comfoo()
. Faz sentido manter isso consistente.foo
; você pode nomear uma classe sem argumentos,Foo
no entanto.<>
não é mais necessário neste caso. Confira minha resposta para mais detalhes.Com o C ++ 17, você pode realmente.
Esse recurso é chamado dedução de argumento do modelo de classe e adiciona mais flexibilidade à maneira como você pode declarar variáveis de tipos de modelo .
Assim,
agora é código C ++ legal .
fonte
Você não tem permissão para fazer isso, mas você pode fazer isso
e então faça
fonte
typedef Foo<float> Fooo;
sem um tipo padrão?using Fooo = Foo<>;
Você pode usar o seguinte:
E tenha
int
seu argumento de modelo. Os colchetes angulares são necessários e não podem ser omitidos.fonte