У меня есть карта, на которой я хотел бы выполнить вызов для каждой функции-члена объекта типа данных. Я пока знаю, как сделать это на любой последовательности, но возможно ли это сделать на ассоциативном контейнере?
Самый близкий ответ, который я смог найти, был такой: Boost.Bind для доступа к элементам std :: map в std :: for_each . Но я не могу использовать boost в моем проекте, так что, есть ли альтернатива STL, которую мне не хватает, чтобы boost :: bind?
Если это невозможно, я подумал о создании временной последовательности для указателей на объекты данных, а затем вызову for_each, что-то вроде этого:
class MyClass
{
public:
void Method() const;
}
std::map<int, MyClass> Map;
//...
std::vector<MyClass*> Vector;
std::transform(Map.begin(), Map.end(), std::back_inserter(Vector), std::mem_fun_ref(&std::map<int, MyClass>::value_type::second));
std::for_each(Vector.begin(), Vector.end(), std::mem_fun(&MyClass::Method));
Это выглядит слишком запутанным, и мне это не очень нравится. Есть предложения?