Salut la foule !
J'ai une question qui me taraude depuis quelques jours.
Ayant besoin de templates pour mon projet, j'ai l'envie incessante de mettre le minimum de code dans les templates pour le mettre plutôt dans une classe mère.
Le code que je mets dans le template est celui nécessitant la classe T du template.
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class LoadObj { public: const int getID() const { return _id; } void setID(const int id) { _id = id; } private: int _id; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 template<class T> class TCRMLoadedObject : public LoadObj { // crée une instance avec un ID automatique static T * const load() { static int CURRENT_ID = 0; CURRENT_ID++; // On crée une instance et on lui met un ID TCRMLoadedObject<T> * tmpLoaObj = new T(); tmpLoaObj->setID(CURRENT_ID); return tmpLoaObj; } }C'est une bonne idée ou il fôdrait que je mette tout directement dans le template ?..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int main() { TCRMLoadedObject<Bonzomme> * toto = TCRMLoadedObject<Bonzomme>::load(); toto->getID(); // vaudra qqchose }
Parce que le problème est que si ensuite je veux faire du polymorphisme, je ne peux pas utiliser le template, comme dans l'exemple ci-dessous :
Comment faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // ça ne va pas marcher, le compilo va me dire qu'il manque l'argument 1 du template... void afficher(TCRMLoadedObject * obj) { print( obj->getD() ); }
Merci![]()
Partager