Я пробовал разные руководства в документации Boost.Asio и пытался заменить компоненты boost на C++11. Однако я получил ошибку при использовании std::bind в Timer.5 - Синхронизация обработчиков в многопоточных программах. Вот предлагаемый код:
#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
class printer { /* Not relevent here */ };
int main()
{
boost::asio::io_service io;
printer p(io);
boost::thread t(boost::bind(&boost::asio::io_service::run, &io));
io.run();
t.join();
return 0;
}
Я попытался заменить boost::thread
на std::thread
и boost::bind
на std::bind
. Вот мой код:
#include <functional>
#include <iostream>
#include <thread>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
class printer { /* Not relevent here */ };
int main() {
boost::asio::io_service io;
printer p(io);
std::thread t(std::bind(&boost::asio::io_service::run, &io));
io.run();
t.join();
}
При компиляции с GCC 4.7 я получил эту ошибку времени компиляции:
g++ -std=c++0x main.cpp -lboost_system -lboost_date_time -lpthread
main.cpp: In function ‘int main()’:
main.cpp:52:60: erreur: no matching function for call to ‘bind(<unresolved overloaded function type>, boost::asio::io_service*)’
main.cpp:52:60: note: candidates are:
/usr/include/c++/4.6/functional:1444:5: note: template<class _Functor, class ... _ArgTypes> typename std::_Bind_helper::type std::bind(_Functor&&, _ArgTypes&& ...)
/usr/include/c++/4.6/functional:1471:5: note: template<class _Result, class _Functor, class ... _ArgTypes> typename std::_Bindres_helper::type std::bind(_Functor&&, _ArgTypes&& ...)
Откуда эта ошибка, принимая во внимание, что я не использовал никаких boost::asio::placeholders
(как объясняется в этом вопросе о переполнении стека -boostasio">Должен ли std::bind быть совместим с boost::asio?)?
std::bind
, например,std::thread t([&io]() { io.run(); });
. Это позволяет полностью избежать разрешения перегрузки. - person mavam   schedule 14.02.2012