У меня есть карта, в которой хранится простая структура с ключом. Структура имеет две функции-члена, одна из которых является константой, а другая - нет. Мне удалось без проблем вызвать const-функцию с помощью std :: for_each, но у меня возникли некоторые проблемы с вызовом неконстантной функции.
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»
Буду признателен за помощь в правильной настройке параметров шаблона, поэтому bind правильно распознает параметры и разрешит мне вызывать неконстантную функцию.
спасибо,
Карл