Est-il possible avec les librairies standars de créer une variable dont le type est un paramètre ?
ex :
void &créeInstance(class laClasse) {
return new laClasse();
}
Est-il possible avec les librairies standars de créer une variable dont le type est un paramètre ?
ex :
void &créeInstance(class laClasse) {
return new laClasse();
}
Attention à l'opérateur new : en C++, il renvoie un pointeur, pas une référence
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void &créeInstance(class laClasse) { return new laClasse(); }
On ne peut pas directement créer une "variable d'un type indéfini à la compilation", puisque le typage du C++ est statique. On peut par contre faire des choses similaires, soit en utilisant le design pattern factory, soit en jouant avec les templates.
NB: dans un cas pareil, renvoyer un std::auto_ptr<T> est préféreable. Il n'y a plus de doute que celui qui récupère la donnée devra la détruire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 template <typename T> T* creeInstance() { return new T(); } .... { int * pi = creeInstance<int>(); ... delete pi; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 template <typename T> std::auto_ptr<T> creeInstance() { return std::auto_ptr<T>(new T()); } .... { std::auto_ptr<int> pi = creeInstance<int>(); ... // destruction implicte et toujours assurée, même si il y a une exception }
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Avec un template, le type est connu statiquement.
Seul le pattern factory peut vraiment faire du dynamique.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager