C++ template de la spécialisation de constructeur
J'ai basé sur un modèle de classe A<T, int>, et de deux typedefs Un<string, 20> et Un<string, 30>.
Comment puis-je remplacer le constructeur pour Un<string, 20> ? Le code suivant ne fonctionne pas:
template <typename T, int M> class A;
typedef A<std::string, 20> one_type;
typedef A<std::string, 30> second_type;
template <typename T, int M>
class A {
public:
A(int m) {test= (m>M);}
bool test;
};
template<>
one_type::one_type() { cerr << "One type" << endl;}
Je voudrais la classe A<std::string,20> pour faire quelque chose que les autres n'ont pas. Comment puis-je le faire sans modifier le constructeur A:A(int) ?
Qu'essayez-vous d'obtenir les classes?
La question n'est pas claire. BTW, one_type n'a pas de constructeur vide, elle a constructeur avec un paramètre de type int.
La question n'est pas claire. BTW, one_type n'a pas de constructeur vide, elle a constructeur avec un paramètre de type int.
OriginalL'auteur user231536 | 2009-12-14
Vous devez vous connecter pour publier un commentaire.
La seule chose que vous ne pouvez pas faire est d'utiliser la
typedef
pour définir le constructeur. Autre que cela, vous devez vous spécialiser lesA<string,20>
constructeur comme suit:Si vous voulez
A<string,20>
d'avoir un différents constructeur que le génériqueA
, vous avez besoin de spécialiser l'ensemble de laA<string,20>
classe:OriginalL'auteur xtofl
En supposant que votre vraiment signifiait pour
A::test
à être accessibles au public, vous pourriez faire quelque chose comme ceci:Coup de pied les pneus:
OriginalL'auteur seh
Vous ne pouvez pas avec votre approche. one_type est un alias pour un modèle particulier de spécialisation, de sorte qu'il devient quoi le code du template.
Si vous souhaitez ajouter du code spécifique à one_type, vous devez le déclarer comme une sous-classe d'Une spécialisation, comme ceci:
Réponse ci-dessous :
OriginalL'auteur Franci Penov
Cela peut être un peu de retard, mais si vous avez accès à
c++11
vous pouvez utiliser SFINAE à accomplir tout ce que vous voulez:Exemple de travail
OriginalL'auteur amc176
Comment sur :
OriginalL'auteur OneOfOne
La meilleure solution que j'ai été en mesure de venir avec cette situation est d'utiliser un "constructeur fonction d'assistance":
OriginalL'auteur WaltK