Você não pode usar os ponteiros da função de membro como ponteiros de função normal, a menos que as funções do membro sejam static
. Você deve usar Boost bind com uma instância de objeto específica:
boolConfigMap["USE_NEW_VERSION"] = boost::bind(&Config::useNewVersion, someInstanceOfConfig);
A razão pela qual os ponteiros da função de membro (não estático) não são os mesmos que os ponteiros normais da função (ou ponteiros da função de membro estático) é que as funções de membro têm um argumento "zeroth" oculto, que é o this
ponteiro dentro da função do membro.
Além disso, sua declaração do boost::function
Objetos devem ser apenas por exemplo
boost::function<bool()>
Que lidará com todos os tipos de funções que retornam um bool
e sem argumentos.
Se o seu compilador for novo o suficiente, você também pode querer mudar para usar std::function
e std::bind
.
Após a sua edição para mostrar com ponteiros de função de membro: você deve chamar os ponteiros de função também corretamente, como
(config.*configIter->second)();