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

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

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"