草庐IT

c++ - 是否可以将 bind() *this 绑定(bind)到类成员函数以回调 C API

有没有办法使用boost或stdbind()以便我可以在CAPI中使用结果作为回调?这是我使用的示例代码:#include#includetypedefvoid(*CallbackType)();voidCStyleFunction(CallbackTypefunctionPointer){functionPointer();}classClass_w_callback{public:Class_w_callback(){//ThiswouldnotworkCStyleFunction(boost::bind(&Class_w_callback::Callback,this));}vo

c++ - 绑定(bind)到已销毁堆栈变量的 const 引用的生命周期

我想知道它是否偶然指向绑定(bind)到已销毁堆栈变量的const引用的指针可以正常工作。我在rvalues上读到const引用生命周期延长,所以这是“正常”的const引用作品,但在Storageref的ctor末尾应该被销毁,不是吗?const引用的生命周期是否也延长了,因为我在指针中检索了它的地址,还是这纯粹是运气?Liveexample#includeclassStorage{public:Storage(constint&ref){p=&ref;}constint*Get()const{returnp;}private:constint*p;};intmain(){Stora

c++ - 为什么根据唯一命名的变量定义结构化绑定(bind)?

为什么结构化绑定(bind)是通过唯一命名的变量和所有模糊的“名称绑定(bind)到”语言来定义的?我个人认为结构化绑定(bind)的工作原理如下。给定一个结构:structBla{inti;short&s;double*d;}bla;以下内容:cv-autoref-operator[a,b,c]=bla;(大致)等同于cv-autoref-operatora=bla.i;cv-autoref-operatorb=bla.s;cv-autoref-operatorc=bla.d;以及数组和元组的等效扩展。但显然,这太简单了,而且所有这些模糊的特殊语言都用来描述需要发生的事情。所以我显然

c++ - 如何将参数的 a::std::vector 绑定(bind)到仿函数?

我正在努力让这个程序正确编译:#include#includeintf(inta,intb){::std::coutRbind_vec(R(*f)(),constV&vec,intidx=0){returnf();}templateRbind_vec(R(*f)(Arg1,ArgT...),constV&vec,intidx=0){constArg1&arg=vec[idx];autocall=[arg,f](ArgT...args)->R{return(*f)(arg,args...);};returnbind_vec(call,vec,idx+1);}intfoo(){::std:

c++ - 使用 boost::bind 将回调发布到任务队列

假设我有一个名为subscribe()的函数,它接受一个回调处理程序,它会在事件被触发时被调用。现在,我有另一个版本,称为subscribe2()。一切都一样,只是在触发时需要将其发布到事件队列。它是使用原始的subscribe()实现的,带有一个名为helper()的辅助函数。它所做的只是将原始处理程序和任何其他参数绑定(bind)到仿函数中,然后调用postToEventQueue()。现在,我想知道是否有一种方法可以消除辅助函数,以便在subsribe2()中,我可以以某种方式将postToTaskQueue()函数和原始函数打包直接回调处理程序,并将其传递给subscribe(

c++ - 将 make_shared 与可变参数模板绑定(bind)

我正在尝试编写以下工厂类,但找不到正确的语法:templateclassFactory{public:Factory(TArgs...args){creator_=std::bind(&std::make_shared,args...);//^^^someerroraroundhere}std::shared_ptrCreate()const{returncreator_();}private:std::function()>creator_;};这就是我使用工厂的方式:classFoo{public:Foo(boolvalue){}};classBar{public:Bar(cons

c++ - std::tr1::function 和 std::tr1::bind

我在C++类中使用非常复杂的C函数时遇到问题(重写C函数不是一个选项)。C函数:typedefvoid(*integrand)(unsignedndim,constdouble*x,void*fdata,unsignedfdim,double*fval);//Thisone:intadapt_integrate(unsignedfdim,integrandf,void*fdata,unsigneddim,constdouble*xmin,constdouble*xmax,unsignedmaxEval,doublereqAbsError,doublereqRelError,double

c++ - std::priority_queue:自定义排序而不定义比较器类

我想要一个自定义排序的优先级队列,但我很懒惰,不想定义一个实现operator()的比较器类。我真的很想编译这样的东西:std::priority_queue,boost::bind(some_function,_1,_2,obj1,obj2)>queue;其中some_function是一个带有四个参数的bool返回函数,第一个和第二个是队列的整数,最后两个是计算排序所需的一些对象(const引用)。(error:‘boost::bind’cannotappearinaconstant-expression)但这不能编译。甚至更简单std::priority_queue,&compa

c++ - 默认参数必须在编译时绑定(bind) - 为什么?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。为什么C++是这样设计的?...(这个问题不同,但与Notpossible:thispointerasadefaultargument.Why?)

c++ - std::bind - 在 vi​​sual studio 中编译意外(未声明的标识符)错误

好吧,如果我正确理解std::bind,我可以使用_1之类的参数来定义一个未给定的参数?正确的?考虑以下行:std::functionfunc(std::bind(&Pred,_1,"name"));这应该行得通,对吧?这将用于std::find_if()函数,因此第一个参数应该是值类型,第二个参数应该是字符串。但是visualstudio2010对此提示并显示以下错误消息:errorC2065:'_1':undeclaredidentifier这很奇怪,我怎么能在visualstudio中说“嘿,第一个参数未绑定(bind)”。Pred是一个以value_type,conststd: