我有一个地图,它存储一个带有键的简单结构。该结构有两个成员函数,一个是 const 另一个不是。我已经成功地使用 std::for_each 调用了 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: 'argument' : 无法从 'const MyStruct *__w64 ' 转换为 'MyStruct *const '
我将不胜感激有关如何正确设置模板参数的任何帮助,因此 bind 确实可以正确识别参数并让我调用非 const 函数。
谢谢,卡尔