Byr*_*ron 2 c++ stl function-pointers map set
我有一个集合存储我要在地图中删除的键.我试过代码打击,但它没有编译.
std::set<std::string> keys;
std::map<std::string, std::string> mymap;
....
for_each(keys.begin(), keys.end(), boost::bind(&std::map<std::string,
std::string>::erase,
&mymap, _1));
Run Code Online (Sandbox Code Playgroud)
您不能获取标准库成员函数的地址,因为未指定此类成员函数的声明(允许实现添加其他可选参数或向其他非重载成员函数添加其他重载,只要行为是相同).
做你想做的最简单的方法是:
for (std::set<std::string>::iterator it(keys.begin()); it != keys.end(); ++it)
{
mymap.erase(*it);
}
Run Code Online (Sandbox Code Playgroud)
如果您有一个支持lambda表达式的编译器,您可能还会考虑:
std::for_each(keys.begin(), keys.end(), [&mymap](const std::string& key)
{
mymap.erase(key);
});
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因你真的想使用bind,你需要编写一个函数对象来调用erase:
struct assoc_erase
{
typedef void result_type;
template <typename TContainer, typename TKey>
void operator()(TContainer* container, const TKey& key)
{
container->erase(key);
}
};
// Used as:
std::for_each(keys.begin(), keys.end(), std::bind(assoc_erase(), &mymap, _1));
Run Code Online (Sandbox Code Playgroud)