Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ mem#u fn()不';你不能在模板上工作吗?_C++_C++11_Clang - Fatal编程技术网

C++ mem#u fn()不';你不能在模板上工作吗?

C++ mem#u fn()不';你不能在模板上工作吗?,c++,c++11,clang,C++,C++11,Clang,我正在玩C++11,发现mem\u fn()。但它似乎对模板不起作用 vector<int> vec; auto push_back = mem_fn(&vector<int>::push_back); vec; 自动推回=mem\u fn(&vector::推回); 编译错误: memfn.cc:18:22: error: no matching function for call to 'mem_fn' auto push_back = mem_fn(

我正在玩C++11,发现
mem\u fn()
。但它似乎对模板不起作用

 vector<int> vec;
 auto push_back = mem_fn(&vector<int>::push_back);
vec;
自动推回=mem\u fn(&vector::推回);
编译错误:

memfn.cc:18:22: error: no matching function for call to 'mem_fn'
auto push_back = mem_fn(&vector<int>::push_back);
memfn.cc:18:22:错误:调用'mem_fn'没有匹配的函数
自动推回=mem\u fn(&vector::推回);
谢谢

vector::push_back
是一个重载函数,您需要使用强制转换选择一个特定重载:

auto push_back = mem_fn(static_cast<void(vector<int>::*)(int const&)>(&vector<int>::push_back));
autopush_-back=mem_-fn(静态_-cast(&vector::push_-back));
或者,由于您使用C++11,因此可以使用lambda函数:

auto push_back = [](vector<int>& v, int i) { v.push_back(i); };
autopush_back=[](向量&v,int i){v.push_back(i);};

请不要跳过
#include
。请注意,如果您删除
mem\u fn
,它也将无法编译,因为push\u-back是重载的。我认为不允许您形成标准库函数的成员函数指针,因为允许实现添加额外的默认参数和额外重载。@Simple-interest,您知道我应该在标准中的何处查找此项吗?@Oktalist请参阅17.6.5.5[成员函数]:实现可以在类中声明其他非虚拟成员函数签名:-通过向成员函数签名添加具有默认值的参数;-用两个或多个具有等效行为的成员函数签名替换具有默认值的成员函数签名;和-通过为成员函数名添加成员函数签名。