草庐IT

c++ - 现代 C++ 中的类型安全回调系统

我正在使用一个使用回调系统的模块,但实现得不是很好。客户端使用一个ID进行注册,并将使用一个变量(或两个,或无)进行回调。问题是几乎每个ID都是不同的变量。(例如:Id1->char*,Id2->int)。这是通过指针传递变量来实现的。所以回调看起来像typedefvoid(*NotifFunctionPtr)(void*ctx,constvoid*option);这种方法有很多问题,我想用一种(类型)安全和现代的方式来处理它。然而,这并不像看起来那么简单,我有一些想法(likeboost::function或用封装类型和ptr的结构替换void*)但我认为也许有更好的主意,所以我想知

c++ - OpenGL 曲面 segmentation 回调未执行

我使用了示例here将我的镶嵌回调移动到不同的类。代码编译,但回调代码永远不会执行。回调类:templateclassSingularCallBack{public:typedefReturnType(Class::*Method)(Parameter);SingularCallBack(Class*class_instance,Methodmethod):class_instance_(class_instance),method_(method){}ReturnTypeoperator()(Parameterparameter){return(class_instance_->*m

如何将值传递给JavaScript中的回调

我想了解JavaScript引擎如何以及何时将值传递给回调函数,我尝试调试和在线查找,但找不到确切的答案,请考虑以下示例:for(vari=0;i此打印以下输出外回调0外回调1外回调2外回调3内部回调4内部回调4内部回调4内部回调4如果我只是使用Let关键字更改I变量的声明,请如下:for(leti=0;i它导致以下输出:外回调0外回调1外回调2外回调3内部回调0内部回调1内部回调2内部回调3在Chrome中调试此问题时,它在第一个示例中显示了我作为测试功能的闭合范围,并在第二个示例中屏蔽范围。看答案这与一个经常询问的问题有关JavaScript封闭循环-简单实践示例,详细介绍了为什么在循环中

c++ - 实现这个 "on error, throw"回调的最佳方式是什么?

请注意:在我们开始真正的问题之前,这里有很多背景信息。我有一个相当广泛的C++类层次结构(代表不同类型的表达式):classBaseValue{virtual~BaseValue();};classIntValuefinal:publicBaseValue{intget()const;};classDoubleValuefinal:publicBaseValue{doubleget()const;};classStringValuefinal:publicBaseValue{std::stringget()const;};另一方面,我有一种方法可以将用户的输入强制转换为预期的类型:cl

c++ - lambda 对象 + c 回调 sigsegv

如果我像这样实现C回调:register_callback([](/*someargs*/){/*somestuff*/});当它触发时我得到一个SIGSEGV,但是如果我这样注册它:autoconstf([](/*someargs*/){/*somestuff*/});register_callback(f);然后它工作正常。(对我而言)特别感兴趣的是地址sanitizer产生的堆栈跟踪:ASAN:SIGSEGV===================================================================22904==ERROR:Address

python - 通过 Cython(回调)将 Python 函数应用于 std::vector

我正在尝试学习如何通过Cython在C和Python之间使用回调,并且一直在查看thisdemo.我想要一个Python函数应用于一个std::vector/numpy.array并将结果存储在另一个中。我可以毫无错误地编译和运行,但最终vectory是没有被改变。C++头文件//callback.hpp#includetypedefdouble(*Callback)(void*apply,double&x);voidfunction(Callbackcallback,void*apply,vector&x,vector&y);C++源代码//callback.cpp#include"

C++ 函数回调 : Cannot convert from a member function to a function signature

我正在使用第3方库,它允许我为某些事件注册回调。注册函数看起来像这样。它使用回调签名。typedefint(*Callback)(std::string);voidregisterCallback(CallbackpCallback){//itgetsregistered}我的问题是我想像这样注册一个成员函数作为回调structMyStruct{MyStruct();intmyCallback(std::stringstr);};MyStruct::MyStruct(){registerCallback(&MyStruct::myCallback);}intMyStruct::myCa

c++ - 使用谷歌测试来检查回调

我有一个Foo类,它存储一个指向回调的指针。可以使用InvokeCallback()方法调用回调。void*SomeCallback(void*a){return(void*)(*(int*)a+10);}classFoo{public:typedefvoid*(*CallbackFunction)(void*);SetCallback(CallbackFunctioncallback){this->callback=callback;}InvokeCallback(){callback(20);}private:CallbackFunctioncallback;}如何测试(使用goo

c++ - 虚函数与回调

考虑一个场景,其中有两个类,即Base和Derived。如果基类想要调用派生类的函数,它可以通过创建一个虚函数并在派生类中定义该VF或使用回调来实现.我想知道两者中应该优先选择什么?两者之间的选择取决于哪些情况/条件?编辑:问题澄清:我指的情况是有一个接收消息的基类。这些不同的消息将由派生类以不同方式处理,因此一种方法是创建一个虚函数并让派生类实现它,通过各种switchcase处理每条消息。另一种方法是通过模板内部的函数指针(指向派生类的函数)实现回调(处理派生类的对象和函数名需要模板)。模板和函数指针将驻留在基类中。 最佳答案

c++ - 没有 Y Combinator 的递归 lambda 回调

我希望创建一个回调,它以回调的形式递归返回自身。建议的递归方法是让函数引用自身:std::functionrecursive_function=[&](intrecurse){std::cout0){recursive_function(recurse-1);}};一旦你从一个函数返回它就会失败:#include#includevolatileboolno_optimize=true;std::functionget_recursive_function(){std::functionrecursive_function=[&](intrecurse){std::cout0){recu