Arguments par défaut du modèle

Si j'ai le droit de faire ce qui suit:

template <typename T = int>
class Foo{
};

Pourquoi ne suis-je pas autorisé à faire ce qui suit dans main ?

Foo me;

But I must specify the following:

Foo<int> me;

C++ 11 a introduit des arguments de modèle par défaut et pour le moment, ils sont insaisissables pour ma compréhension complète.


Solution du problème

Noter:

Foo me;sans arguments de modèle est légal à partir de C++17. Voir cette réponse: https://stackoverflow.com/a/50970942/539997.

Réponse originale applicable avant C++17 :

Tu dois faire:

Foo<> me;

Les arguments du modèle doivent être présents mais vous pouvez les laisser vides.

Considérez-le comme une fonction fooavec un seul argument par défaut. L'expression foone l'appellera pas, mais foo()le fera. La syntaxe de l'argument doit toujours être là. Ceci est cohérent avec cela.

Commentaires

Posts les plus consultés de ce blog

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables