Non è possibile utilizzare i puntatori della funzione membro come puntatori di funzionalità normali, a meno che le funzioni del membro non siano static
. Dovresti invece usare Aumenta il legame Con un'istanza specifica dell'oggetto:
boolConfigMap["USE_NEW_VERSION"] = boost::bind(&Config::useNewVersion, someInstanceOfConfig);
Il motivo per cui i puntatori (non statici) della funzione membro non sono uguali ai puntatori della funzione normale (o puntatori di funzioni membri statici) è che le funzioni dei membri hanno un argomento "zeroeth" nascosto, cioè il this
puntatore all'interno della funzione membro.
Inoltre, la tua dichiarazione del boost::function
Gli oggetti dovrebbero essere solo ad es.
boost::function<bool()>
Che gestirà tutti i tipi di funzioni che restituiscono un bool
e non prendere argomenti.
Se il tuo compilatore è abbastanza nuovo, potresti anche voler cambiare std::function
e std::bind
.
Dopo la tua modifica da mostrare con i puntatori della funzione membro: devi anche chiamare correttamente i puntatori della funzione, come
(config.*configIter->second)();