Bonjour,
Je me trouve dans une situation un peu tordue, que j'essaye de schématiser ci-dessous. En gros, des objets de classes templatisées doivent être créés par une abstract factory... du coup, il y aurait besoin d'écrire quelque chose comme :
FACTORY<AbstractComportement,line>::Instance()->GetObject(comp);
Jusque-là, la factory que nous utilisions n'avait qu'un paramètre template (AbstractComportement, mettons) et la déclaration des comportements à la factory se faisait depuis leur fichier d'implémentation via une macro :
DECLARE_COMPORTEMENT(Comportement,"mot_clef");
Mais est-ce qu'une telle stratégie demeure possible si la factory dépend d'un deuxième paramètre template ? Est-ce faisable de lister des choses comme ça :
1 2
| DECLARE_COMPORTEMENT(Comportement, line1,"mot_clef");
DECLARE_COMPORTEMENT(Comportement, line2,"mot_clef"); |
dans les fichiers d'implémentation des classes comportement ?
Ci-dessous, la situationsous forme un peu plus codée... Toute aide serait la bienvenue !!
Merci tout plein :-)
Marc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| class base
{
public:
virtual void Fonction1() = 0;
}
class AbstractComportement
{
public:
virtual void Comportement() = 0;
}
template<typename line> class Comportement1 : public AbstractComportement
{
public:
virtual void Comportement()
{
//blabla
}
}
class line1{
//blabla
}
class line2{
//blabla
}
template<typename line>class derive : public base
{
public:
virtual void Fonction1()
{
//blabla
}
derive(string comp)
{
pcomportement = FACTORY<AbstractComportement,line>::Instance()->GetObject(comp); //est-ce viable ?
}
private:
AbstractComportement* pcomportement;
} |
Faut-il faire une déclaration de ce type :
1 2 3 4 5 6
| #define DECLARE_COMPORTEMENT(CLASS_NAME,KEYWORD) \
namespace { \
AbstractComportement* creator(){ return new (CLASS_NAME);} \
const string kwords(KEYWORD); \
const bool registered = Factory<AbstractComportement,line>::Instance().Register(kwords,creator); \
} |
Est-ce que la chose se passe bien en déclarant via la macro depuis le fichier de comportement pour chaque line ??
Partager