Vous ne pouvez pas utiliser les pointeurs de fonction des membres comme pointeurs de fonction normaux, à moins que les fonctions des membres ne soient static
. Vous devriez plutôt utiliser Boost Bind avec une instance d'objet spécifique:
boolConfigMap["USE_NEW_VERSION"] = boost::bind(&Config::useNewVersion, someInstanceOfConfig);
La raison pour laquelle les pointeurs de fonction des membres (non statiques) ne sont pas les mêmes que les pointeurs de fonction normaux (ou les pointeurs de fonction des membres statiques) est que les fonctions des membres ont un argument "Zeroeth" caché, c'est-à-dire l'argument this
pointeur à l'intérieur de la fonction membre.
De plus, votre déclaration de la boost::function
Les objets ne doivent être que par exemple
boost::function<bool()>
Qui gérera tous les types de fonctions renvoyant un bool
et ne prenant aucun argument.
Si votre compilateur est assez nouveau, vous voudrez peut-être également changer pour utiliser std::function
et std::bind
.
Après votre modification à montrer avec des pointeurs de fonction des membres: vous devez également appeler les pointeurs de fonction correctement, comme
(config.*configIter->second)();