почему это не «boost :: bind» компилировать?

Я пытаюсь использовать 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;
}

2

Решение

Замечания:
глядя на http://my.oschina.net/yellia/blog/90678, автор объясняет реализацию boost :: bind просто и понятно. Я надеюсь, что это поможет вам. 哈哈

0

Другие решения

Ваши подписи не совпадают. Попробуй это:

#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;
}

Компиляция проверена под GCC с g++ main.cpp -lboost_system -lpthread

Для дальнейшего использования, это помогает добавить

  • полностью компилируемые примеры
  • полное сообщение об ошибке компиляции / компоновщика

при публикации фрагментов, подобных приведенным выше, чтобы спасти людей, которые хотят помочь вам время.

2

Если вы не можете изменить подпись, вам нужно передать значение для error_code связывать вместо заполнителя, чтобы он мог предоставляться при вызове функции

т.е .:

#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
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector