我正在尝试使用boost :: bind和boost :: function,但是出现了编译错误。 为什么不能将占位符绑定到函数对象?
void fun_1(const boost::system::error_code& error)
{
std::cout<<"test_1------------"<<std::endl;
}
void fun_2(int i)
{
std::cout<<"tset_2------------"<<std::endl;
}
int main(void)
{
boost::function0<void> fobj;
//fobj = boost::bind(&fun_1,boost::asio::placeholders::error);//compile failed
fobj = boost::bind(&fun_2,5);//syntax is ok
return 0;
}
答案 0 :(得分:2)
您的签名不匹配。试试这个:
#include <boost/function.hpp>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
void fun_1(const boost::system::error_code& error)
{
std::cout<<"test_1------------"<<std::endl;
}
void fun_2(int i)
{
std::cout<<"tset_2------------"<<std::endl;
}
int main(void)
{
boost::function<void (const boost::system::error_code&)> fobj;
fobj = boost::bind(&fun_1,boost::asio::placeholders::error);
return 0;
}
使用g++ main.cpp -lboost_system -lpthread
为了将来参考,有助于添加
在发布上述代码段时,可以节省想要帮助您的时间。
答案 1 :(得分:2)
如果您无法更改签名,则需要将error_code
的值传递给bind而不是占位符,以便在调用函数时提供它
即:
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/asio.hpp>
#include <boost/system/error_code.hpp>
void fun_1(const boost::system::error_code& error)
{
std::cout<<"test_1------------"<<std::endl;
}
void fun_2(int i)
{
std::cout<<"tset_2------------"<<std::endl;
}
int main()
{
boost::function0<void> fobj;
//fobj = boost::bind(&fun_1,boost::asio::placeholders::error);//compile failed
fobj = boost::bind( &fun_1,
boost::system::errc::make_error_code( boost::system::errc::success ) );//compiles ok
// fobj = boost::bind(&fun_2,5);//syntax is ok
return 0;
}
答案 2 :(得分:0)
注意:强> 通过查看http://my.oschina.net/yellia/blog/90678,作者清楚而简单地解释了boost :: bind的实现。我希望它对你有所帮助。哈哈