提升 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 兼容并在服务器示例中使用。
我正在工作 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 兼容并在服务器示例中使用。