草庐IT

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++ - 如何在 C++ 绑定(bind)中使用不透明指针包装 C 库

我正在考虑用C++包装一些C库,但我不确定包装不透明指针的最佳方法是什么。当C语言结构是公共(public)API的一部分时typedefstruct_SomeType{inta;intb;}SomeType_t;有几个“成员”函数的地方:voidSomeTypeFoo(SomeType_t*obj,...);voidSomeTypeBar(SomeType_t*obj,...);我喜欢从基派生的方法,将这些“成员”函数简单地关联为实际的类成员。即:classSomeTypeWrapper:publicSomeType_t{voidfoo(...);voidbar(...);};就我的

C++ std::bind 重新绑定(bind)函数

如果我像这样绑定(bind)一个函数,在绑定(bind)时使用占位符std::bind(memberFunctionPointer,objectPointer,_1,_2);然后是否可以稍后“重新绑定(bind)”它以替换一些/所有占位符,但不调用该函数?我希望能够传入一些参数然后存储它,以便稍后调用。(延迟回调) 最佳答案 您可以再次绑定(bind):autof=std::bind(memberFunctionPointer,objectPointer,_1,_2);autog=std::bind(f,val1,val2);g()

c++ - 在 C++ 中绑定(bind)多个引用的临时对象的生命周期

C++标准草案N4296说[class.temporary/5]Thesecondcontextiswhenareferenceisboundtoatemporary.Thetemporarytowhichthereferenceisboundorthetemporarythatisthecompleteobjectofasubobjecttowhichthereferenceisboundpersistsforthelifetimeofthereferenceexcept...所以我想知道如果两个或多个引用绑定(bind)到一个临时文件会发生什么。它在标准中有具体规定吗?以下代码可能

c++ - 无法从 std::bind 推断出 std::function 的模板参数

我正在尝试找到一种方法来调用多个类成员函数,每个函数都有不同的参数,并且在调用前后会发生某些已知功能。这个包装函数是我试过的,但是例如对它的最终调用不会编译错误:'boolWrapper(Work*,std::function,Args&&...)':couldnotdeducetemplateargumentfor'std::function'from'std::_Bind,Work*const>'classWork{public:voidDoWork(inta,doubleb,stringc);private:voidPre(){};voidPost(){};boolStep1()

v-bind详解与常见用法

我的感悟你真的了解v-bind吗,它的api其实挺多的,如果你没有仔细看完官网,恐怕只知道v-bind是用来绑定值可变的属性。如果不愿意看官网的小伙伴或者是觉得官网晦涩难懂,可以我这篇文章,你会熟悉更多关于v-bind的使用。如有错误,欢迎大家批评指正提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录目录我的感悟文章目录我的感悟一、v-bind是什么?二、详细用法总结 1.v-bind介绍     2..v-bind动态绑定class(对象方法) 3.v-bind动态绑定class(数组语法)  4.v-bind动态绑定style(对象语法) 5.v-bind动态绑定st

c++ - std::bind 和作用域后堆栈使用

所以,今天我在运行一些使用AddressSanitizer构建的代码时,偶然发现了一个奇怪的作用域后堆栈使用错误。我有这个简化的例子:#includeclassk{public:operatorint(){return5;}};constint&n(constint&a){returna;}intmain(){kl;returnstd::bind(n,l)();}ASAN提示最后一行代码:==27575==ERROR:AddressSanitizer:stack-use-after-scopeonaddress0x7ffeab375210atpc0x000000400a01bp0x7f

c++ - 简单的for()循环基准测试与任何循环绑定(bind)都花费相同的时间

我愿意编写使我的CPU执行某些操作的代码,并查看他花费多少时间来解决这些问题。我想做一个从i=0到iPD:我昨天开始学习C++,很抱歉,如果这是一个很容易回答的问题,但找不到解决方案#include#includeusingnamespacestd;intmain(){intstart_s=clock();inti;for(i=0;i 最佳答案 顺便说一句,如果您实际上完成了i,则gcc和clang在具有32位int(包括x86和x86-64)的系统上创建一个无限循环。49058349083大于INT_MAX。大字面量会隐式提升为足

c++ - 在 C++ 中对带参数(字符串)的函数使用 std bind

我正在尝试在我的记录器类中创建一个std::functionsvector。当我尝试将方法绑定(bind)到我的std::function时:NcursesWindowlog_win("Logs",LINES-1,COLS/3,0,COLS*2/3);std::functionf=std::bind(&NcursesWindow::add_string,&log_win);add_string函数定义如下:voidadd_string(stringtext);但是,gcc(使用gfilt插件来尝试理解模板错误)返回:BDSoftwareSTLMessageDecryptorv3.10f

c++ - std::function 和 std::bind 行为

我有这个代码:#include#include#includevoidfun(){std::cout>vec;vec.push_back(std::bind(fun));vec.push_back(gun);vec[0](1);vec[1](2);}您能解释一下std::bind是如何实现的吗?返回std::function绑定(bind)时void()功能?如何调用void()使用void(int)的功能仿函数? 最佳答案 作为function的模板参数传递的签名仅确定将绑定(bind)多少个占位符(_1)以及类型。实际函数的调用