草庐IT

c++ - 如何使用 lambda 来 boost asio 异步完成处理程序

#include#include#include#includevoidprint(boost::asio::deadline_timer*t,int*count){if(*countexpires_at(t->expires_at()+boost::posix_time::seconds(1));t->async_wait(boost::bind(print,t,count));}}intmain(){boost::asio::io_serviceio;intcount=0;boost::asio::deadline_timert(io,boost::posix_time::seco

c++ - 指定一个可以绑定(bind)到函数模板的模板参数

我正在尝试编写一个高阶函数,它将环绕采用输入和输出迭代器的标准库函数。这是一次失败的尝试:#include#include#include#includeusingnamespacestd;templateclassFunc,typenameInpIt,typenameUnaryFunction>decltype(Func(declval(),declval(),declval()))Apply(InpItfirst,InpItlast,UnaryFunctionf){returnFunc(first,last,f);}intmain(){vectora(5);Apply(a.begi

c++ - 将 unique_ptr 引用传递给 boost::bind?

我在CentOS6.6(gcc4.4.7)上使用Boost.Asio(1.41)进行开发。我希望io_service在启动时调用manger对象m中的成员函数run()。我尝试编译的代码如下所示:#include#include#includeboost::asio::io_serviceio;std::unique_ptrm;m=std::make_unique;io.post(boost::bind(&manager::run,&m));gcc对boost::bind语句进行了调整,其中包括:/usr/include/boost/bind/mem_fn_template.hpp:4

函数重载的 C++ 后期绑定(bind)

假设我有这两个类:classHello{//memberspublic:virtualintdoit(){return3;}};classWow:publicHello{//memberspublic:virtualintdoit(){return2;}};intmain(intargc,constchar*argv[]){Hello*c=newWow();returnc->doit();}众所周知,这段代码将由C++中的后期绑定(bind)处理,由Clang在LLVMIR中实现,如下所示:;...%7=bitcast%class.Wow*%5to%class.Hello*store%

c++ - 将 std::function 绑定(bind)到不同对象实例的相同函数

是否可以重新绑定(bind)std::function以指向相同的函数但具有不同的对象实例?如果我有一个对象,它有一个绑定(bind)到另一个函数的std::function,但是如果那个对象被复制到另一个实例,我想将std::function重新绑定(bind)到那个新实例而不是旧实例。#include"stdafx.h"#include#includeclassEventHandler{public:intNum;std::functionOnEvent;EventHandler(intinNum){Num=inNum;}EventHandler(constEventHandler

c++ - 结构化绑定(bind)和引用元组

我在设计一个简单的zip函数时遇到了一个问题,可以这样调用:for(auto[x,y]:zip(std::vector{1,2,3},std:vector{-1,-2,-3}){//...}所以zip将返回类型为zip_range的对象,本身暴露begin和end返回zip_iterator的函数.现在,一个zip_iterator,正如我实现的那样,使用std::tuple-其中Iterators是压缩容器迭代器的类型-以跟踪其在压缩容器中的位置。当我取消引用zip_iterator时,我获得了对压缩容器元素的引用元组。问题是它不适合结构化绑定(bind)语法:std::vector

c++ - 如何在 C++ 中使用 std::bind 函数作为信号处理程序?

我正在使用以下代码将信号处理添加到我的C++类中:namespace{std::atomicsignal_flag(false);}voidterminate_or_interrupt_handler(intsignal){switch(signal){caseSIGTERM:WARN("SIGTERMreceived");signal_flag.store(true);break;caseSIGINT:WARN("SIGINTreceived");signal_flag.store(true);break;default:throw(std::runtime_error("Unhan

由于无法解析重载函数,C++ 绑定(bind)失败

这个问题在这里已经有了答案:std::bindoverloadresolution(3个答案)关闭3年前。voidprintVector(vector&data){for(autoi:data){coutdata{0,1,2,3,4,5,6,7,8,9};vectorresult;result.resize(data.size());transform(data.begin(),data.end(),result,bind(std::pow,_1,2));return0;}抛出的错误是:stlalgo.cpp:22:61:error:nomatchingfunctionforcallt

c++ - tr1::mem_fn 和 tr1::bind:常量正确性和重载

以下代码片段有什么问题?#include#include#includeusingnamespacestd::tr1::placeholders;structabc{typedefvoidresult_type;voidhello(int){std::cout尝试用g++-4.3编译它,似乎cv-qualifier重载函数混淆了tr1::mem_fn和tr1::bind并出现以下错误:nomatchingfunctionforcallto‘bind(,...下面的代码片段编译但似乎破坏了const-correctness:structabc{typedefvoidresult_type

c++ - 从模板中绑定(bind)模板函数

接续thisquestion.我正在尝试绑定(bind)一个给定的函数,该函数返回除void之外的其他内容,以便稍后能够简单地调用f()。但是,以下代码无法在GCC4.4上编译。它在VS2010上编译,但生成的程序崩溃。templatevoid_hideRet(std::functionfunc,RetType*ret){*ret=func();}templatestd::functionregisterFunc(FuncTypefunc,RetType*ret,ParamTypeparam){autof=std::bind(func,std::forward(param));retu