2010-07-03 6 views
3

Possible en double:
C++ invoke explicit template constructorcomment appelez-vous ce constructeur de modèle?

Salut,

template <typename T> 
class testing 
{ 
public: 

    template <typename R> 
    testing() 
    { 
     // constructor A 
    } 

    template <typename R> 
    testing(const R&) 
    { 
     // constructor B 
    } 
}; 

Quelle est la syntaxe pour appeler le constructeur A?

J'ai besoin du type à transmettre lors de l'appel du constructeur. Y a-t-il un moyen de l'appeler? Le constructeur B est une solution de contournement car j'ai seulement besoin de connaître le type et non l'objet entier.

Merci,

Stephen

+0

désolé pour le double emploi, comme je ne sais pas quoi chercher celui-ci. Merci pour la réponse ci-dessous les gars. – stephenteh

+0

C'est le problème avec la recherche: quand vous ne connaissez pas le terme pour qualifier le problème, il est très difficile de chercher ... –

Répondre

2

Vous ne pouvez pas. Le modèle de classe est basé sur le type T. Par conséquent, tout paramètre de modèle que vous transmettez lors de l'instanciation de la classe correspond à T et non à R.

Edit: Vous pouvez également trouver ce poste utile: Constructor templates and explicit instantiation

Vous devriez aller de l'avant avec la solution de contournement (constructeur B). La plupart des compilateurs modernes vont optimiser le paramètre inutilisé, donc cela ne devrait faire aucune différence.

+0

Oui. le constructeur A (constructeur sans argument) ne peut pas être appelé. Bien que le compilateur ne semble pas donner d'avertissement lorsqu'il voit la définition de classe, il n'y a aucun moyen de l'appeler. – rwong

3

vous pouvez créer solution de contournement:

template<class A> 
testing(boost::mpl::identity<A>); 

// and instantiate like this 
testing(boost::mpl::identity<A>()); 

je posé la question très similaire avant C++ invoke explicit template constructor

Questions connexes