Vector d'objet et map de méthode.
Bonjour.
J'essaye de calculer la somme de la valeur d'un attribut de plusieurs objet d'une classe Article mais le problème, c'est que ça ne fonctionne pas. Cette attribut est choisi en entrant son nom dans la console.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
class Article
{
private: // Attributes
int mId;
string mName;
string mReference;
double mQuantity;
double mUnitPrice;
double mExpQuantity;
//...
public:
//Getters And Setters
}; |
Je stocke l'ensemble des articles dans un vector 'mArticles':
Code:
1 2
|
vector<Article> mArticles; |
Pour choisir l'attribut en fonction du mot choisi, j'associe les getters de la classe Article aux mots dans une map 'mAttributes' :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
// Gestion du type des attributs
enum TypeEnum {TYPE_INT, TYPE_STRING, TYPE_DOUBLE, TYPE_BOOLEAN, TYPE_NULL};
struct attribute {
enum TypeEnum Kind;
union {
string (Article::*GetString)();
int (Article::*GetInt)();
double (Article::*GetDouble)();
bool (Article::*GetBoolean)();
};
};
// Liste des getters de la classe Article
map<string, attribute*> mAttributes; |
Le problème arrive lorsque je veux appliquer une méthode de la map à un objet du vector.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
vector<Article>::iterator iter;
double sum_double = 0;
switch (mAttributes[attr]->Kind)
{
case TYPE_DOUBLE:
for( iter = mArticles.begin(); iter != mArticles.end(); iter++ )
{
double (Article::*fun)() = mAttributes[attr]->GetDouble;
sum_double += (iter->* fun)(); // error C2296
// iter->GetQuantity(); Fonctionne
}
return sum_double;
//...
}
// error C2296: '->*' : non conforme, l'opérande gauche est du type 'std::_Vector_iterator<_Ty,_Alloc>' |
Quelqu'un aurait une idée sur le moyen de résoudre ce problème?
Je me suis mis au c++ depuis pas longtemps donc certaines choses sont encore un peu obscurs pour moi :).
Merci par avance.