c – 绑定类方法并将其作为函数指针传递
发布时间:2020-12-16 07:22:04 所属栏目:百科 来源:网络整理
导读:我想将我的类方法作为参数传递给(第三方)函数 ?(listner – 无法更改)接受函数指针和void *.以下是一个例子: #include functionaltypedef void(*pfnc) (void*);struct Foo{ static void static_foo(void*) { } void foo(void*) { } void listner(pfnc f,voi
我想将我的类方法作为参数传递给(第三方)函数
?(listner – 无法更改)接受函数指针和void *.以下是一个例子: #include <functional> typedef void(*pfnc) (void*); struct Foo { static void static_foo(void*) { } void foo(void*) { } void listner(pfnc f,void* p) { f(p); } void test() { listner(static_foo); // works with static method auto f = [](void*) {}; listner(f); // works with lambda std::function<void(void*)> stdf = std::bind(&Foo::foo,this,std::placeholders::_1); listner(stdf); // does not compile with not static method } }; 不幸的是我的解决方案无法编译我需要改变什么? 解决方法
从回调信号的外观来看,监听器API将指向void的指针作为“用户定义的数据”.您可以将此作为数据和一个小的无状态代理函数传递给Foo上的处理程序:
typedef void(*pfnc) (void*); struct Foo { static void static_foo(void*) { } void foo() { } void listner(pfnc f,void* user_data) { // eventually calls f(user_data); } void test() { listner(static_foo,nullptr); // works with static method auto f = [](void*) { }; listner(f,nullptr); // works with lambda listner([](void* pv) { reinterpret_cast<Foo*>(pv)->foo(); },this); } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 为什么我不能在for循环中使用x 1?
- 开源SourceForget.net Top 25 个项目介绍(2)
- what-happens-when-you-change-weblogi-configuration
- postgresql – 自定义ORDER BY说明
- 【hibernate框架】关系映射之一对一单向外键关联(XML实现)
- c# – ASP.NET MVC HtmlHelper Razor语法
- iphone – 使用UINavigationController推送viewcontroller有
- swift3 – FileManager replaceItemAt()导致EXC_BAD_ACCESS
- 什么是Oracle PL / SQL COALESCE函数的C#等价物?
- DSP之外部设备连接接口之EMIF