Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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++ 将带有bind成员函数的std::bind对象传递给函数_C++_C++11_Boost_Std Function_Stdbind - Fatal编程技术网

C++ 将带有bind成员函数的std::bind对象传递给函数

C++ 将带有bind成员函数的std::bind对象传递给函数,c++,c++11,boost,std-function,stdbind,C++,C++11,Boost,Std Function,Stdbind,我想通过公共函数将回调函数连接到boost信号。我可以很好地传递函数指针,但如果我尝试使用std::bind传递成员函数,它将无法编译。给我一个错误,说没有可行的转换。App::SetCallback函数参数应该使用什么类型 #包括 #包括 使用命名空间std::占位符;//对于1,2,3。。。 //简单回调函数 void SimpleCallback(int值){ //无所事事 } //类包含boost::signal,通过公共函数设置回调 类应用程序{ 公众: App():sig_uz()

我想通过公共函数将回调函数连接到boost信号。我可以很好地传递函数指针,但如果我尝试使用std::bind传递成员函数,它将无法编译。给我一个错误,说没有可行的转换。App::SetCallback函数参数应该使用什么类型

#包括
#包括
使用命名空间std::占位符;//对于1,2,3。。。
//简单回调函数
void SimpleCallback(int值){
//无所事事
}
//类包含boost::signal,通过公共函数设置回调
类应用程序{
公众:
App():sig_uz()
{}
typedef boost::信号SigType;
typedef std::函数CallbackFunType;
//将信号连接到回调函数
void SetCallback(CallbackFunType callback){
信号连接(回调);
}
//private://出于测试目的对其进行注释。
SigType sig;//这是boost::信号
};
//具有成员回调函数的类
类MyCallback{
公众:
MyCallback():
val(0),app()
{}
无效成员CB(int值){
val=值;
}
void Connect(){
自动绑定\u fun=std::bind(&MyCallback::MemberCb,this,\u 1);
app.SetCallback(bind_fun);//这将不会编译,没有可行的转换
app.sig_uu.connect(bind_u-fun);//这很好
app.SetCallback(SimpleCallback);//这很好
}
私人:
int-val;
应用程序;
};
int main(int argc,字符**argv){
我的回调我的cb;
我的cb.Connect();
返回1;
}
----------------更新-----------------


更仔细地阅读boost信号文档,我了解到我可以通过插槽类型。这解决了我的问题

#包括
#包括
使用命名空间std::占位符;//对于1,2,3。。。
//简单回调函数
void SimpleCallback(int值){
//无所事事
}
//类包含boost::signal,通过公共函数设置回调
类应用程序{
公众:
App():sig_uz()
{}
typedef boost::信号SigType;
typedef SigType::slot_type CallbackFunType;
//typedef std::函数CallbackFunType;
//将信号连接到回调函数
void SetCallback(CallbackFunType callback){
信号连接(回调);
}
//private://出于测试目的对其进行注释。
SigType sig;//这是boost::信号
};
//具有成员回调函数的类
类MyCallback{
公众:
MyCallback():
val(0),app()
{}
无效成员CB(int值){
val=值;
}
void Connect(){
自动绑定\u fun=std::bind(&MyCallback::MemberCb,this,\u 1);
app.SetCallback(bind_-fun);//使用SigType::slot_-type
app.sig_uu.connect(绑定乐趣);
app.SetCallback(SimpleCallback);
}
私人:
int-val;
应用程序;
};
int main(int argc,字符**argv){
我的回调我的cb;
我的cb.Connect();
返回1;
}

更仔细地阅读boost信号文档,我了解到我可以通过插槽类型。这解决了我的问题

#包括
#包括
使用命名空间std::占位符;//对于1,2,3。。。
//简单回调函数
void SimpleCallback(int值){
//无所事事
}
//类包含boost::signal,通过公共函数设置回调
类应用程序{
公众:
App():sig_uz()
{}
typedef boost::信号SigType;
typedef SigType::slot_type CallbackFunType;
//typedef std::函数CallbackFunType;
//将信号连接到回调函数
void SetCallback(CallbackFunType callback){
信号连接(回调);
}
//private://出于测试目的对其进行注释。
SigType sig;//这是boost::信号
};
//具有成员回调函数的类
类MyCallback{
公众:
MyCallback():
val(0),app()
{}
无效成员CB(int值){
val=值;
}
void Connect(){
自动绑定\u fun=std::bind(&MyCallback::MemberCb,this,\u 1);
app.SetCallback(bind_-fun);//使用SigType::slot_-type
app.sig_uu.connect(绑定乐趣);
app.SetCallback(SimpleCallback);
}
私人:
int-val;
应用程序;
};
int main(int argc,字符**argv){
我的回调我的cb;
我的cb.Connect();
返回1;
}

更仔细地阅读boost信号文档,我了解到我可以通过插槽类型。这解决了我的问题

#包括
#包括
使用命名空间std::占位符;//对于1,2,3。。。
//简单回调函数
void SimpleCallback(int值){
//无所事事
}
//类包含boost::signal,通过公共函数设置回调
类应用程序{
公众:
App():sig_uz()
{}
typedef boost::信号SigType;
typedef SigType::slot_type CallbackFunType;
//typedef std::函数CallbackFunType;
//将信号连接到回调函数
void SetCallback(CallbackFunType callback){
信号连接(回调);
}
//private://出于测试目的对其进行注释。
SigType sig;//这是boost::信号
};
//具有成员回调函数的类
类MyCallback{
公众:
MyCallback():
val(0),app()
{}
无效成员CB(int值){
val=值;
}
void Connect(){
自动绑定\u fun=std::bind(&MyCallback::MemberCb,this,\u 1);
app.SetCallback(bind_-fun);//使用SigType::slot_-type
app.sig_uu.connect(绑定乐趣);
app.SetCallback(SimpleCallback);
}
私人:
int-val;
应用程序;
};
int main(int argc,字符**argv){
我的回调我的cb;
我的cb.Connect();
返回1;
}

。也可以使用Apple LLVM 7.0.2对应的任何铿锵版本。你在用什么构建?@rhashimoto很高兴知道它在你的平台上工作。我正在使用Apple LLVM 7.1和Boost1.58构建。我将尝试新版本的boost,看看它是否有效。不完全正确,但我可能会在这里使用lambda而不是
std::bind
。。也可以使用Apple LLVM 7.0.2对应的任何铿锵版本。你在用什么构建?@rhashimoto很高兴知道它在你的平台上工作。