キーを持つ単純な構造体を格納するマップがあります。構造体には 2 つのメンバー関数があり、1 つは const で、もう 1 つはそうではありません。std::for_each を使用して const 関数を問題なく呼び出すことができましたが、非 const 関数の呼び出しに問題がありました。
struct MyStruct {
void someConstFunction() const;
void someFunction();
};
typedef std::map<int, MyStruct> MyMap;
MyMap theMap;
//call the const member function
std::for_each(theMap.begin(), theMap.end(),
boost::bind(&MyStruct::someConstFunction, boost::bind(&MyMap::value_type::second, _1)));
//call the non-const member function
std::for_each(theMap.begin(), theMap.end(),
boost::bind(&MyStruct::someFunction, boost::bind(&MyMap::value_type::second, _1)));
const メンバー関数の呼び出しは正常に機能しますが、boost は内部的に const MyStruct を予期しているように見えるため、MSVC7.1 では次のコンパイル エラーで失敗します。
boost\bind\mem_fn_template.hpp(151): エラー C2440: '引数': 'const MyStruct *__w64 ' から 'MyStruct *const ' に変換できません
テンプレートパラメーターを正しく設定する方法について何か助けていただければ幸いです。バインドはパラメーターを正しく認識し、非 const 関数を呼び出すことができます。
ありがとう、カール