Pouvez les paramètres du modèle d'un constructeur à être explicitement spécifié?
Un constructeur d'une classe peut être une fonction de modèle. Au point où un tel constructeur est appelé, le compilateur considère habituellement les arguments donnés par le constructeur et détermine le modèle utilisé des paramètres à partir d'eux. Est-il aussi certains de la syntaxe pour spécifier les paramètres du modèle de façon explicite?
Un exemple artificiel:
struct A {
template<typename T>
A() {}
};
Est-il possible d'instancier cette classe? Quelle est la syntaxe pour spécifier explicitement le constructeur de paramètres de modèle?
Mon cas d'utilisation serait un problème a été le compilateur ne semble pas trouver la bonne basée sur des modèles du constructeur. De spécifier explicitement les paramètres du modèle serait probablement générer plus de messages d'erreur utiles ou même résoudre le problème.
- Spécifiant explicitement arguments de modèle pour les constructeurs ne fonctionne qu'en explicite les spécialisations, les instanciations, de définitions de ligne et ami déclarations du constructeur.
template <class TArg> struct A { template<typename T = TArg> A() {} };
- fonctionne très bien pour moi. Mais bien sûr, nous avons maintenant en classe de modèle.
Vous devez vous connecter pour publier un commentaire.
Pas. Le C++03 standard dit:
Il y a une autre solution pour transférer des informations de type basées sur des modèles de constructeurs qui ne peut pas prendre une valeur de ce type, comme un argument:
Edit:
Veuillez noter:
A a(id<int>());
ne fonctionnera pas, en raison de la plus délicate à analyser. Il serait interprété comme une déclaration de fonction. Voir cette question pour de plus amples explications.non, vous ne peut pas instancier cette classe à l'aide que constructeur. MAIS:
Maintenant vous pouvez.
template <typename T> A(const T* = NULL);
Être sûr de garder cet espace entre * et = ou vous vous demanderez pour les jours à ce que le message d'erreur signifie...Comme une solution de contournement: vous pouvez définir basé sur un modèle statique de la fonction de fabrication, qui, à leur tour, de retour d'une instance à l'aide d'un constructeur privé.
Vous obtenez alors de nouvelles instances de Un comme ceci: