conception sans friend [cpp] - C++ - Programmation
MarshPosté le 07-01-2010 à 11:34:31
Bonjour,
Je voudrais faire une classe dont les données internes (et privées) serait modifiable suivant différentes stratégie (c'est d'ailleurs le nom du design Pattern) Existe t'il une conception élegante pour ne pas utiliser friend ?
Voila ce à quoi j'avais pensé avec friend:
Code :
class Object
{
friend IStrategie;
int _data1;
double _data2;
//...
IStrategy *_strategy;
void execute(){_strategy->execute(*this);}
};
class IStrategy
{
public:
void execute(Object & obj)=0;
};
class Strategy1 : public IStrategy
{
public:
void execute(Object & obj){obj._data1 = 2; /*ou tout autre valeur suivant algo*/}
};
class Strategy2 : public IStrategy
{
public:
void execute(Object & obj){obj._data2 = 1.23; /*ou tout autre valeur suivant algo*/}
};
Probleme : this (et donc *this) est const et donc je ne peux pas le modifier ? faire un const_cast ?? Je dois déclare comme friend, IStrategy mais aussi Strategy1, Strategy2, ... et ce n'est pas l'idéal car je ne connais pas encore toute mes strategies... Passer la/les valeurs modifier en retour/paramètres n'est pas envisageable non plus (je ne connais pas exactement le nombre de paramètres, ce n'est pas les mêmes utilisés par chaque stratégie...
sinon, tu peux avoir une interface privée à ton objet et lui attacher les stratégie (avec interface commune, donc), opération au cours de laquelle cet objet transmetun pointeur sur son interface privée à la stratégie ?
Marsh Posté le 07-01-2010 à 11:34:31
Bonjour,
Je voudrais faire une classe dont les données internes (et privées) serait modifiable suivant différentes stratégie (c'est d'ailleurs le nom du design Pattern)
Existe t'il une conception élegante pour ne pas utiliser friend ?
Voila ce à quoi j'avais pensé avec friend:
Probleme : this (et donc *this) est const et donc je ne peux pas le modifier ? faire un const_cast ??
Je dois déclare comme friend, IStrategy mais aussi Strategy1, Strategy2, ... et ce n'est pas l'idéal car je ne connais pas encore toute mes strategies...
Passer la/les valeurs modifier en retour/paramètres n'est pas envisageable non plus (je ne connais pas exactement le nombre de paramètres, ce n'est pas les mêmes utilisés par chaque stratégie...
Des solutions ? Des idées ?