J'ai une carte qui stocke une structure simple avec une clé. La structure a deux fonctions membres, l'une est const l'autre non. J'ai réussi à appeler la fonction const en utilisant std :: for_each sans aucun problème, mais j'ai quelques problèmes pour appeler la fonction non-const.Boost.Bind pour accéder aux éléments std :: map dans std :: for_each
struct MyStruct {
void someConstFunction() const;
void someFunction();
};
typedef std::map<int, MyStruct> MyMap;
MyMap theMap;
//call the const member function
std::for_each(theMap.begin(), theMap.end(),
boost::bind(&MyStruct::someConstFunction, boost::bind(&MyMap::value_type::second, _1)));
//call the non-const member function
std::for_each(theMap.begin(), theMap.end(),
boost::bind(&MyStruct::someFunction, boost::bind(&MyMap::value_type::second, _1)));
L'appel à la fonction membre const fonctionne très bien, mais il semble stimuler quelque part à l'intérieur d'un attend const MyStruct, et ne satisfait donc pas l'erreur de compilation suivante dans MSVC7.1.
boost \ bind \ mem_fn_template.hpp (151): erreur C2440: 'argument': ne peut pas convertir 'const MyStruct * __ w64' à 'MyStruct * const'
J'apprécierais tout Aide sur la façon de définir correctement les paramètres du modèle, donc bind reconnaît les paramètres correctement et laisse-moi appeler la fonction non const.
grâce, Carl
Que diriez-vous si vous sauvegardez et dites-nous ce que vous essayez vraiment d'accomplir ici?Utiliser for_each avec une carte avec boost :: bind * pourrait être raisonnable, mais il y a de fortes chances qu'une approche générale différente fonctionne mieux (plusieurs fois ce genre de question se pose, parce que 'std :: for_each' est un mauvais choix pour la situation, et quelque chose comme 'std :: copy' ou std :: accumulate' ferait le travail beaucoup plus simplement). –
Le MyStruct est utilisé dans une sorte de système de particules, où MyStruct est la particule. La fonction const est une fonction draw(), la fonction non-const calcule la nouvelle position. La clé de la carte est la date de création. De toute façon, au moment où j'ai posté la question, c'était plus sur la façon de faire ce travail que si c'était un bon design au début. – Carl