为什么这个std::绑定失败
why this std::bind fails?
此绑定操作与visual studio 2013的错误C3867的错误是什么?
#include <map>
#include <vector>
#include <algorithm>
#include <functional>
int main()
{
std::map<int, int> m1, m2;
std::vector<std::map<int, int> *> pM;
std::for_each(pM.begin(), pM.end(),
std::bind(std::map<int, int>::erase , 1));
}
如果要删除向量中每个贴图的元素(哪个键为1)。这是一个样品。
#include <map>
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;
using namespace std::placeholders;
int main()
{
std::map<int, int> m1 {{1,2},{2,3},{3,4}}, m2 {{2,3},{1,5},{8,9}};
std::vector<std::map<int, int> *> pM {&m1,&m2};
size_t(std::map<int,int>::*pf)(const int& key)=&std::map<int,int>::erase;//note this line.
std::for_each(pM.begin(), pM.end(),std::bind(pf,_1,1));//note this line
for(auto& ele:m1)
{
cout<<ele.first<<","<<ele.second<<endl;
}
for(auto& ele:m2)
{
cout<<ele.first<<","<<ele.second<<endl;
}
}
正如chris所说:
首先,成员函数不会衰减为成员函数指针。另一方面,std::map::erase被重载。
我们必须使用&
来获取成员函数指针,并且必须告诉编译器您要选择哪个重载函数。所以写这样的代码:
size_t(std::map<int,int>::*pf)(const int& key)=&std::map<int,int>::erase;
此外:
std::bind(pf,_1,1)
成员函数需要对象作为其隐含的第一个参数,_1
做这项工作。最后一个参数1
是int,作为映射擦除成员函数的密钥传递。
相关文章:
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- Qt - QUdpSocket 绑定不断失败
- std::tie 在从函数调用传递值时失败,并显示"无法绑定非常量左值引用"
- 当Boost ::绑定模板函数时,模板参数扣除/替换失败
- QUdp套接字绑定失败
- 在 Mac 上C++编译代码时处理“dyld:惰性符号绑定失败:找不到符号”错误
- C++ 由于无法解决过载功能而导致绑定失败
- dyld:惰性符号绑定失败:找不到符号:_yylex
- 从返回绑定中获取函数失败
- dyld:惰性符号绑定失败:找不到符号.预期在:平面命名空间
- 为线程构造函数传递引用以将其绑定到函数失败
- 为什么结构化绑定在 GCC 上失败
- 使用 objcopy --redefine-syms 的绑定失败
- 为什么这个std::绑定失败
- 惰性符号绑定失败:找不到符号
- sc_start警告 W571 表示信号/端口绑定失败
- C++套接字编程:sendto()和recvfrom()错误代码10038和in 'server'绑定失败,10038
- 使用ShareAddress进行多播的QUdpSocket绑定失败
- 运行时使用MVVM绑定失败
- OSX 10.7.5 上的 node-gyp -- dyld:惰性符号绑定失败:找不到符号