J'ai une carte de pointeur à un membre déclaré comme:C++ Appel pointeur vers un membre d'une carte d'une fonction const
std::map<char, T (Operand::*)(const T &, const T &)> op_map;
Je remplirai ma carte avec pointeur vers un membre directement dans le constructeur de ma classe avec:
op_map['+'] = &Operand::op_add;
Par exemple, le code source est op_add:
T op_add(const T & a, const T & b) {
return a + b;
}
Et je veux appeler mon pointeur vers Membe r d'une fonction const. Voici le code source:
IOperand *res_int32(char op, const IOperand & rhs) const {
IOperand *res = const_cast<IOperand *>(&rhs);
Operand<int> *tmp = dynamic_cast<Operand<int>*>(res);
T res_calc = (this->*op_map[op])(_value, (T)tmp->getValue());
}
Mais il me fait toujours une erreur:
Operand.hpp:70:64: error: passing ‘const std::map<char, double (Operand<double>::*)(const double&, const double&), std::less<char>, std::allocator<std::pair<const char, double (Operand<double>::*)(const double&, const double&)> > >’ as ‘this’ argument of ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = char, _Tp = double (Operand<double>::*)(const double&, const double&), _Compare = std::less<char>, _Alloc = std::allocator<std::pair<const char, double (Operand<double>::*)(const double&, const double&)> >, std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = double (Operand<double>::*)(const double&, const double&), std::map<_Key, _Tp, _Compare, _Alloc>::key_type = char]’ discards qualifiers [-fpermissive]
Operand.hpp:70:64: error: invalid conversion from ‘const Operand<double>* const’ to ‘Operand<double>*’ [-fpermissive]
Avez-vous une solution?
Merci.
L'opérateur '[operator] d'une carte ne peut pas être appelé sur des cartes' const'. –
Pourquoi diable avez-vous besoin de 'const_cast'? Est-ce que 'l'opérande :: getValue' n'est pas déclaré' const'? –