Est-il possible d'avoir une classe modélisée et aussi de modéliser le constructeur avec un autre type?classe modélisée avec un constructeur basé sur un modèle (d'un autre type)
quelque chose comme ceci:
template<typename T1>
class Foo{
template<typename T2>
Foo(T1 aBar, T2 dummyArgument){
bar = aBar;
bytesOfT2 = sizeof(T2);
};
int bytesOfT2;
T1 bar;
};
est-ce possible? et si oui, comment pourrais-je appeler un tel constructeur? Dois-je considérer quelque chose en ce qui concerne les fichiers header et cpp?
merci! // edit: mon exemple particulier est en fait même un peu plus compliqué. j'ai
template <typename U1, U2>
class Foo{
U1 var1;
U2 var2;
};
template <typename T1>
class Bar{
template<typename T2, typename T3>
Bar(Foo<T2,T3> aFoo, T1 aVal){
val=aVal;
bytesOfT2=sizeof(T2);
bytesOfT3=sizeOf(T3);
};
int bytesOfT2;
int bytesOfT3;
T1 val;
};
ce que cela signifie que je peux ici appeler le constructeur juste avec une variable de type Foo et il devrait sélectionner automatiquement le bon constructeur acording à la version de Foo (par exemple, si la variable i passe est de tapez Foo devrait-il automatiquement mettre T2 à bool et T3 à flotter)?
Que voulez-vous dire par « Ai-je besoin d'envisager quelque chose en ce qui concerne les fichiers de tête et cpp? » –
mmmh - pour certaines raisons (dont je ne me souviens pas) parfois je devais mettre une seule ligne comme "modèle de classe Foo;" dans le fichier cpp si jamais je voulais pouvoir utiliser la classe Foo avec le type de template bool. (donc j'avais besoin de faire cela pour chaque type que je voulais utiliser avec la classe modélisée) –
Mat
Ah. Vous pouvez lire à propos de pourquoi c'est le cas dans [la FAQ C++ Lite] (http://www.parashift.com/c++faq-lite/templates.html#faq-35.12) (cette entrée et les entrées suivantes discutent du "problème" et comment vous le résoudre, il est généralement préférable d'implémenter le modèle entier dans le fichier d'en-tête). –