メンバー関数がある場合を除き、メンバー関数ポインターを通常の関数ポインターとして使用することはできません。 static
. 。代わりに使用する必要があります ブーストバインド 特定のオブジェクトインスタンスで:
boolConfigMap["USE_NEW_VERSION"] = boost::bind(&Config::useNewVersion, someInstanceOfConfig);
(非静的な)メンバー関数ポインターが通常の関数ポインター(または静的メンバー関数ポインター)と同じではない理由は、メンバー関数が隠された「ゼロ」引数を持っていることです。 this
メンバー関数内のポインタ。
また、あなたの宣言 boost::function
オブジェクトは、たとえばのみである必要があります
boost::function<bool()>
これにより、あらゆる種類の関数が返されます bool
そして、議論をしません。
コンパイラが十分に新しい場合は、使用するために変更することもできます std::function
と std::bind
.
編集してメンバー関数ポインターを表示する後:関数ポインターを正しく呼び出す必要があります。
(config.*configIter->second)();