2017-10-12 1 views
-1

Quelqu'un peut-il me dire dans le but d'une valeur de modèle par défaut comme dansmodèle par défaut pas à la fin

template <typename, typename = void, int...> struct foo {}; 

lors de la déclaration foo<int, void, 5> compilera mais foo<int, 5> ne sera pas? N'est-ce pas le but de typename = void afin que nous puissions omettre cette entrée afin qu'elle soit void par défaut? Si une telle syntaxe n'est pas autorisée, alors pourquoi y avoir la valeur par défaut?

+0

Il serait plus difficile que ça vaut la peine de faire 'foo ' être assez intelligent pour passer la valeur par défaut et passer à 'int ...'. Bien sûr, c'est assez facile dans ce cas, mais dès que vous essayez de le généraliser, vous rencontrez des ambiguïtés et d'autres complications. – chris

+0

Il est difficile de mélanger des arguments de modèle par défaut et des modèles variés. – AndyG

+0

Il est difficile de dire avec un contexte littéralement zéro pourquoi un morceau de code existe. – Barry

Répondre

2

Puisqu'un pack de paramètres peut être vide, dans cet exemple foo<int> va compiler. Sans l'argument par défaut, vous avez explicitement besoin de foo<int, void>.