提升 asio 自定义分配器处理程序 io 服务 post 编译错误

boost asio custom allocator handler io service post compile errors

我正在工作 io_service post 调用如下所示:

  _io_service.post(std::tr1::bind(&BlitzLogger::push,this,
                                    std::tr1::bind(&BlitzLogger::stringer<typename boost::decay<T const &>::type,
                                                   typename boost::decay<Args const &>::type ...>, this,
                                                   t, args ...)));

我怀疑绑定调用有一些可以消除的开销,所以我继续为处理程序布置自定义分配器,如

中所述
 http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/example/allocation/server.cpp

在此之后,我想做如下事情:

_io_service.post(
    makeCustomAllocHandler(_allocator1,std::tr1::bind(&BlitzLogger::push,this,
    makeCustomAllocHandler(_allocator2,std::tr1::bind(&BlitzLogger::stringer<typename boost::decay<T const &>::type,
                                                      typename boost::decay<Args const &>::type ...>,this,t,args ...)))));

上面这段代码抛出编译时错误(模板参数推导/替换失败的主机), 但是,如果我删除 _io_service.post 调用,并将其限制为

    makeCustomAllocHandler(_allocator1,std::tr1::bind(&BlitzLogger::push,this,
    makeCustomAllocHandler(_allocator2,std::tr1::bind(&BlitzLogger::stringer<typename boost::decay<T const &>::type,
                                                      typename boost::decay<Args const &>::type ...>,this,t,args ...))));

然后代码编译正常。

很明显,问题是 return 类型的 makeCustomAllocHandler 不符合 post 函数的模板处理程序参数。

为什么会这样,我该如何解决这个问题。

CompletionHandler object returned by makeCustomAllocHandler should define void operator()() instead of void operator()(const boost::system::error_code&, std::size_t) required by ReadHandler 兼容并在服务器示例中使用。