Sie können keine Mitgliedsfunktionszeiger als normale Funktionszeiger verwenden, es sei denn, die Mitgliedsfunktionen sind static
. Sie sollten stattdessen verwenden Boost Bind mit einer bestimmten Objektinstanz:
boolConfigMap["USE_NEW_VERSION"] = boost::bind(&Config::useNewVersion, someInstanceOfConfig);
Der Grund, warum (nicht statische) Mitgliedsfunktionszeiger nicht mit normalen Funktionen (oder statischen Mitgliedsfunktionszeigern) sind, ist, dass Mitgliederfunktionen ein verstecktes "Zeroeth" -Argument haben, das ist das this
Zeiger in der Mitgliedsfunktion.
Auch Ihre Erklärung der boost::function
Objekte sollten nur zB sein
boost::function<bool()>
Das wird alle Arten von Funktionen behandeln, die a zurückgeben bool
und keine Argumente nehmen.
Wenn Ihr Compiler neu genug ist, möchten Sie möglicherweise auch ändern, um zu verwenden std::function
und std::bind
.
Nach Ihrer Bearbeitung, um mit Mitgliedsfunktionszeiger zu zeigen: Sie müssen auch die Funktionszeiger korrekt aufrufen, wie
(config.*configIter->second)();