我很难弄清楚mem_fun_ref
。我必须承认,我通常将仿函数用于这类事情,因为它们可以内联以提高速度和利润。但是,这段代码不会成为瓶颈,所以我想尝试一下。
这是我想做的一个例子。我知道还有其他方法可以做到这一点。我不想使用copy
,我不想使用范围成员函数,我不想使用back_inserter
. 我特别想用mem_fun_ref
. 这只是一个简单的例子,实际情况要复杂得多。也就是说,我真的不知道为什么这是错误的,但我不熟悉mem_fun_ref
or mem_fun
。
这是我想要的工作:
#include <list>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
list<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
vector<int> b;
// should work like magic!
for_each(a.begin(), a.end(), bind1st(mem_fun_ref(&vector<int>::push_back), b));
}
但我得到3个错误:
1>c:\program files\microsoft visual studio 9.0\vc\include\functional(276) : error C2529: '_Right' : reference to reference is illegal
1>c:\program files\microsoft visual studio 9.0\vc\include\functional(281) : error C2529: '_Right' : reference to reference is illegal
1>c:\program files\microsoft visual studio 9.0\vc\include\functional(282) : error C2535: 'void std::binder1st<_Fn2>::operator ()(const int &(&)) const' : member function already defined or declared
1> with
1> [
1> _Fn2=std::mem_fun1_ref_t<void,std::vector<int>,const int &>
1> ]
1> c:\program files\microsoft visual studio 9.0\vc\include\functional(276) : see declaration of 'std::binder1st<_Fn2>::operator ()'
1> with
1> [
1> _Fn2=std::mem_fun1_ref_t<void,std::vector<int>,const int &>
1> ]
reference to reference is illegal
让我认为该函数需要按值获取参数。但当然,这不可能在 中更改vector
,也不可能在我的代码中更改。是否有一个简单的改变来让它工作?我需要一个 1-liner 的解决方案。