En C , il n'est pas possible d'invoquer explicitement un constructeur de modèle dans une liste d'initialisation. Prenons l'exemple suivant :
struct T { template<class> T(); }; struct U { U() : t<void>() {} //does not work T t; };
Ce code ne pourra pas être compilé, car la norme C interdit explicitement les listes d'arguments de modèle explicites pour les modèles de fonctions membres du constructeur. Cela est dû à la syntaxe unique des constructeurs, qui n'ont pas de nom de fonction.
Explication : La norme C indique dans la section 14.8.1/7 :
"Étant donné que la liste d'arguments de modèle explicite suit le nom du modèle de fonction et que les modèles de fonctions membres de conversion et les modèles de fonctions membres de constructeur sont appelés sans utiliser de nom de fonction, il n'existe aucun moyen de fournir un argument explicite. liste d'arguments de modèle pour ces modèles de fonctions. qui accepte les paramètres du modèle comme argument :
Dans ce cas, le type d'identité de la bibliothèque Boost ou le std::type_identity de C 20 peut être utilisé pour représenter le type de paramètre du modèle. Cela permet au constructeur de modèle d'être invoqué indirectement à l'aide d'un objet de ce type personnalisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!