J'ai la solution, je l'ai codée vite fait en un peut moins d'une heure.
Je dois encore arranger un peut, pour mettre une gestion d'erreur, mais la solution est assez bonne.
J'aurais juste a coder ainsi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Forme* pForme = fabrique.make<Forme> ("Triangle");
vector<Point*> vPoint;
vector<Forme*> vForme;
vPoint.push_back (fabrique.make<Point>("Point2D"));
vPoint.push_back (fabrique.make<Point>("Point3D"));
.
.
.
vForme.push_back (fabrique.make<Forme> ("Cercle"));
vForme.push_back (fabrique.make<Forme> ("Triangle"));
.
.
. |
Si je veux un pointeur directement sur une classe plus haut dans la hiérarchie, je dois spécifier cette classe (mais bon, c'est pas prévu pour l'utiliser de cette manière):
Point3D* p3D = fabrique.make<Point3D> ("Point3D");
Si je rajoute un élément a une hiérarchie:
1 2 3 4 5 6 7 8 9 10 11
| class Ligne
{
.
.
.
private:
typedef FabriqueTemplate<Ligne> Fabrique;
static Fabrique fabrique;
};
Ligne::Fabrique Ligne::fabrique ("Ligne"); |
grosso modo, juste trois lignes de code à rajouter.
Partager