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