0
我有下面的程序和它的作品:std :: bind不能用于引用?
#include<iostream>
#include<functional>
using namespace std;
using namespace std::placeholders;
void f(int i,int j){
++i;
++j;
}
int main(){
int i=0;
int j=0;
bind(&f,_1,i)(3);
bind(&f,j,_1)(4);
return 0;
}
但是,如果我改变F到接收参考,并添加REF()绑定:
#include<iostream>
#include<functional>
using namespace std;
using namespace std::placeholders;
void f(int &i,int &j){
++i;
++j;
}
int main(){
int i=0;
int j=0;
bind(&f,_1,ref(i))(3);
bind(&f,ref(j),_1)(4);
return 0;
}
那么它不能通过编译:
铛--std = C++ 11给出以下错误:
no matching function for call to object of type '__bind<void (*)(int &,
int &), std::__1::placeholders::__ph<1> &, int &>'
bind(&f,_1,i)();
如何解决它?
使用lambda代替bind。至少使用-std = C++ 14! – 2017-07-27 08:41:07
'f(i,4)'也是一个错误。 – molbdnilo
std :: ref不创建引用,它创建一个reference_wrapper。 – xaxxon