object factory et classes templates
Bonjour,
Je bute sur une question dont je ne sais comment trouver la solution... Je veux créer des objets en fonction d'un mot clef dans un fichier de mise en données, et je me dis qu'a priori la bonne façon de faire serait d'utiliser une factory, mais ces objets sont des instances de classes templates et du coup je ne sais pas comment les déclarer auprès de la factory... Pour les classes ordinaire, j'utilise une macro, qui ressemble à ceci :
Code:
1 2 3 4 5 6
| #define DECLARE_CRYSTALLO(CLASS_NAME,KEYWORD) \
namespace { \
Crystallo* creator(){ return new (CLASS_NAME);} \
const string kwords(KEYWORD); \
const bool registered = Factory<Crystallo>::Instance().Register(kwords,creator); \
} |
et qui est invoquée dans les fichiers d'implémentation des classes concernées (.C, pour nous).
Mais pour des classes templates, je n'ai plus de fichier d'implémentation, du coup je ne sais pas trop où je peux invoquer cette macro en ce qui les concerne...
Pour le moment, le travail est fait ainsi:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
if((*gr)->GetLineType() == "line")
_graphs[(*gr)->GetTag()]=new CommandGraph<Line>(*this,
(*gr)->GetTag(),
graphbox,
graphmin,
graphmax,
egrid);
else if((*gr)->GetLineType() == "faultedline")
_graphs[(*gr)->GetTag()]=new CommandGraph<FaultedLine>(*this,
(*gr)->GetTag(),
graphbox,
graphmin,
graphmax,
egrid); |
Ce que je préfèrerais nettement remplacer par un appel à une O.F. ... Est-ce que je devrais créer un fichier bidon à compiler qui ne contiendrait que des appels à la macro qui va bien pour déclarer ces classes auprès de la factory ? Ou y a-t-ilune arnaque que je ne comprends pas ?
Merci tout plein !!! :-)
Marc