Boost asio Boost bind AIX xlc io_服务运行

Boost asio Boost bind AIX xlc io_服务运行,boost-asio,aix,boost-bind,xlc,Boost Asio,Aix,Boost Bind,Xlc,我试图使用boost编译项目,将asio::io_服务绑定到boost::thread,我遇到了我不知道如何解决的错误 使用:IBMXLC/C++forAIX,V11.1(5724-X13),版本:11.01.0000.0006(AIX7.1) “/home/clag/projects/tomas/include/boost/asio/detail/posix_fd_set_adapter.hpp”,第33.30行:1540-0198(W)省略的关键字“private”假定用于基类“noncop

我试图使用boost编译项目,将asio::io_服务绑定到boost::thread,我遇到了我不知道如何解决的错误 使用:IBMXLC/C++forAIX,V11.1(5724-X13),版本:11.01.0000.0006(AIX7.1)

“/home/clag/projects/tomas/include/boost/asio/detail/posix_fd_set_adapter.hpp”,第33.30行:1540-0198(W)省略的关键字“private”假定用于基类“noncopyable”。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第50.46行:1540-0219(S)对“boost::bind”的调用没有最佳匹配。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第50.58行:1540-1229(I)参数1是“重载函数:boost::asio::io_service::run”类型的右值。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第50.100行:1540-1229(I)参数2是“const boost::reference_wrapper”类型的右值。
“/home/clag/projects/tomas/include/boost/bind/bind_mf_cc.hpp”,第30.5行:1540-1202(I)没有一个候选者比“boost::bind(unsigned long(io_service::*)()const,reference_wrapper)”更好。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第50.58行:1540-1231(I)从参数编号1到“unsigned long(boost::asio::io_service::*)()const”的转换使用解析的重载函数“size_t boost::asio::io_service::run()”。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第50.100行:1540-1231(I)从参数2到“boost::reference_wrapper”的转换使用“身份转换”。
“/home/clag/projects/tomas/include/boost/bind/bind_mf_cc.hpp”,第20.5行:1540-1202(I)没有一个候选者比“boost::bind(unsigned long(io_服务::*)(),reference_wrapper)”更好。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第50.58行:1540-1231(I)从参数1到“unsigned long(boost::asio::io_service::*)()”的转换使用解析的重载函数“size_t boost::asio::io_service::run()”。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第50.100行:1540-1231(I)从参数2到“boost::reference_wrapper”的转换使用“身份转换”。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第52.35行:1540-0219(S)对“boost::bind”的调用没有最佳匹配。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第52.47行:1540-1229(I)参数1是“重载函数:boost::asio::io_service::run”类型的右值。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第52.98行:1540-1229(I)参数2是类型为“boost::asio::io_service*”的右值。
“/home/clag/projects/tomas/include/boost/bind/bind_mf_cc.hpp”,第30.5行:1540-1202(I)没有一个候选者比“boost::bind(unsigned long(io_服务::*)()const,io_服务*)更好。”。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第52.47行:1540-1231(I)从参数1到“unsigned long(boost::asio::io_service::*)()const”的转换使用解析的重载函数“size_t boost::asio::io_service::run()”。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第52.98行:1540-1231(I)从参数2到“boost::asio::io_service*”的转换使用“身份转换”。
“/home/clag/projects/tomas/include/boost/bind/bind_mf_cc.hpp”,第20.5行:1540-1202(I)没有一个候选者比“boost::bind(unsigned long(io_服务::*)(),io_服务*)更好”。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第52.47行:1540-1231(I)从参数1到“unsigned long(boost::asio::io_service::*)()”的转换使用解析的重载函数“size_t boost::asio::io_service::run()”。
“/home/clag/projects/tomas/ots/src/agent/agent.cc”,第52.98行:1540-1231(I)从参数2到“boost::asio::io_service*”的转换使用“身份转换”。
“/home/clag/projects/tomas/include/boost/asio/impl/write.hpp”,第276.7行:1540-0198(W)省略的关键字“private”假设用于基类“detail::base_from_completion_cond”。
“/home/clag/projects/tomas/include/boost/asio/impl/write.hpp”,第276.7行:1540-0198(W)省略的关键字“private”假设用于基类“detail::base\u from\u completion\u cond>boost::asio::detail::transfer\u all\t>”
导致错误的代码:

    acceptor_thread_.reset(new boost::thread(boost::bind(&boost::asio::io_service::run, boost::cref(*accept_io_service_))));
    for (int i = 0; i < agent_config_.threads(); i++) {
        thread_group_.create_thread(boost::bind(&boost::asio::io_service::run, work_io_service_.get()));
    }
acceptor\u thread.reset(新的boost::thread(boost::bind(&boost::asio::io\u service::run,boost::cref(*accept\u io\u service)));
对于(int i=0;i
定义:

    boost::shared_ptr<boost::asio::io_service> accept_io_service_;
    boost::shared_ptr<boost::thread> acceptor_thread_;
    boost::shared_ptr<boost::asio::io_service> work_io_service_;
    boost::thread_group thread_group_;
boost::共享\u ptr接受\u io\u服务;
boost::共享\u ptr接收器\u线程\uu;
boost::共享\u ptr工作\u io\u服务\uu;
boost::线程组线程组;
我要说的是,这可能只是一些标志选项,但我在任何地方都找不到 因为同样的代码在Linux(GCC)、HP-UX(aCC)和Windows(MSVC)上编译得非常好


Thx帮助

快速的google搜索表明AIX在重载解析方面存在问题,特别是当涉及模板时。因此,可能值得尝试不同的方法来减少需要发生的过载解析量

例如,可以使用来代替

std::size_t(io_服务::*run)(=&io_服务::run;
boost::线程t(boost::mem_fn(运行),io_服务);

此外,如果编译器仍然有解决超载的问题,那么考虑编写一个简单的函子。构造函数的唯一要求是

func
参数是可复制的,并且
func()
必须是有效的表达式

struct service\u runner
{
显式服务\u运行程序(boost::共享\u ptr io\u服务)
:io_服务(io_服务)
{}
std::size_t operator()(){return io_service->run();}
boost::共享的ptr io_服务;
};
...
boost::线程t((服务运行器(io服务));
需要考虑的其他要点
    boost::shared_ptr<boost::asio::io_service> accept_io_service_;
    boost::shared_ptr<boost::thread> acceptor_thread_;
    boost::shared_ptr<boost::asio::io_service> work_io_service_;
    boost::thread_group thread_group_;
No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::reference_wrapper<const boost::asio::io_service> >(unsigned long (io_service::*)() const, reference_wrapper<const boost::asio::io_service
>)".
No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::reference_wrapper<const boost::asio::io_service> >(unsigned long (io_service::*)(), reference_wrapper<const boost::asio::io_service>)".
No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::asio::io_service *>(unsigned long (io_service::*)() const, io_service *)".
No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::asio::io_service *>(unsigned long (io_service::*)(), io_service *)".
void test(int a);
void test(int a, int b);
void test(int a);
void test2(int a, int b);