草庐IT

Function-Index

全部标签

c++ - 如何序列化 boost::function 以将其发送到 message_queue

我实际上正在尝试使用boost::serialize序列化一个boost::function,因为我想在boost::interprocess::message_queue中共享它。我只看到一种方法,即使用boost::serialize的非侵入式版本。namespaceboost{namespaceserialization{templatevoidserialize(Archive&ar,boost::function&fct,constunsignedintversion){ar&fct.args;ar&fct.arity;ar&fct.vtable;ar&fct.functor

c++ - std::function 和信号/槽系统

我正在尝试在没有boost的情况下用C++创建一个简单的信号/槽系统,但是当我尝试将它与参数一起使用时遇到了一些问题,这是我的代码:我的信号类:templateclassSignal{private:typedefstd::functionSlot;public:Signal();voidconnect(Slotslot);voidemit(Tdata);voidemit();private:std::vectorslots;};我的测试类:classObject{public:Object();voidsayHello(inti);};所以,我这样使用我的类:Signalsignal

C++ 类变量 std::function 具有默认功能并且可以更改

需要在类中有一个函数变量,它具有默认功能并且它的功能可以被覆盖。例如我喜欢/想做的事情(不幸的是没有成功):#include#includeusingnamespacestd;classBase{public:std::functionmyFunc(){cout我知道,这段代码无法编译。任何人都可以帮助解决这个问题,或者推荐一些东西。不需要是std::function,如果有另一种方法来实现这个逻辑。也许应该使用lambda?! 最佳答案 更改为:classBase{public:std::functionmyFunc=[](){c

c++ - 带有 std::function 参数的重载运算符

我正在研究多类型map架。它适用于所有原始类型以及结构,例如观点。但是,如果我想添加std::function作为另一个支持的类型(用于回调),那么编译器会提示:MT.cpp:426:15:Noviableoverloaded'='MT.h:31:7:Candidatefunction(theimplicitcopyassignmentoperator)notviable:noknownconversionfrom'(lambdaatMT.cpp:426:17)'to'constsharkLib::MT'for1stargumentMT.h:31:7:Candidatefunction

c++ - __builtin__FUNCTION() 是否有 MSVC 等价物?

根据这个answer我们可以在GCC中使用__builtin__FUNCTION()找到调用函数的名称。是否有MSVC等效项? 最佳答案 std::source_location将是future的跨平台解决方案,让您可以:voidlog(conststd::string&message,conststd::experimental::source_location&location=std::experimental::source_location::current()){std::cout在此之前,我所知道的最佳解决方案是使用宏

c++ - 如何将 `void(*fn)(const char *, ...)` 转换为 `std::function`,反之亦然

typedefvoid(*fn1)(constchar*,...);typedefstd::functionfn2;//hasinitializerbutincompletetype直觉上,这些对我来说实际上是一样的,但显然我的直觉让我失望了。我将如何协调这些数据类型?fn2为什么是不完整的类型?需要对fn2的签名进行哪些更改,以允许我为其分配fn1类型?创建要分配给fn2的lambda时,如何访问可变参数列表?换句话说,等价于以下的lambda是什么?voidfn1_compatible(constchar*format,...){va_listargs;va_start(args,

C++ 虚函数调用与 boost::function 调用的速度对比

我想知道与同一个boost::function调用相比,单继承虚函数调用的速度有多快。它们的性能几乎相同还是boost::function更慢?我知道性能可能因情况而异,但作为一般规则,哪个更快,速度有多大?谢谢,吉列尔姆--编辑KennyTM的测试对我来说足够有说服力。出于我自己的目的,boost::function似乎并不比vcall慢多少。谢谢。 最佳答案 作为一种非常特殊的情况,考虑调用一个空函数109次。代码A:structX{virtual~X(){}virtualvoiddo_x(){};};structY:publi

c++ - 使用 boost multi_index_container 来保留插入顺序

我最初开始使用std::multimap来存储许多具有相同键的值,但后来我发现它不会保留具有相同键的值之间的插入顺序。Thisanswer声称可以使用boost::multi_index::multi_index_container来完成,但没有给出示例。查看文档,没有这种用法的示例,而且我无法弄清楚你应该如何使用这个东西。我已经开始期待较少使用的boost库提供糟糕的文档,但这很重要。任何人都可以向我指出一个教程或示例,说明它以我想要的方式使用,或者甚至可以自己提供一个示例吗? 最佳答案 您可以通过将boost::multi_in

c++ - boost MPL : Call a (member) function only if it exists

我有一个类A,它有一个模板参数T。有些用例中类T提供函数func1(),有些用例中T不提供它。A中的函数f()应该调用func1(),前提是它存在。我认为这应该可以通过boostmpl实现,但我不知道如何实现。这里有一些伪代码:templateclassA{voidf(Tparam){if(T::func1isanexistingfunction)param.func1();}};如果是else-case会更好:templateclassA{voidf(Tparam){if(T::func1isanexistingfunction)param.func1();elsecout

c++ - 复制 boost::function 是否也复制闭包?

假设我有这样一个函数:voidsomeFunction(constExpensiveObjectToCopy&);如果我创建一个boost::functionoutifit,该函数将在其闭包中存储它自己的对象的克隆拷贝:boost::functionf=boost::bind(someFunction,x);//现在,如果我开始传递f,boost::function复制构造函数每次都会再次复制该对象,还是每个函数共享同一个闭包?(即像这样)boost::functionf2=f;callSomeFunction(f);etc. 最佳答案