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();
}
Version imprimable
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érenceCode:
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:
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:
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 }
Avec un template, le type est connu statiquement.
Seul le pattern factory peut vraiment faire du dynamique.