如何正确地将指针传递给第三方代码的成员函数
How to properly pass a pointer to a member function for a 3rd party code?
我有这个第三方类型的定义:
typedef void (*NexTouchEventCb)(void *ptr);
在第三方库中的函数中使用:
void NexTouch::attachPop(NexTouchEventCb pop, void *ptr)
如果我有一个.cpp文件,那么我可以在没有任何编译器错误的情况下成功调用attachPop
:
NexButton b0 = NexButton(0, 1, "b0");
void b0PopCallback(void *ptr)
{
// do something here
}
b0.attachPop(b0PopCallback, &b0);
但是我糟糕,所以我有自己的标题和类文件:
mynextion.h
class MyNextion {
public:
void init();
void b0PopCallback(void *ptr);
private:
NexButton *b0;
}
mynextion.cpp
#include "MyNextion.h"
void MyNextion::init() {
b0 = new NexButton(0, 1, "b0");
b0->attachPop(/* what should I put here? */);
}
void MyNextion::b0PopCallback(void *ptr) {
// do something here
}
我也遇到了几个类似的问题,也是这个问题。但是我只是不明白。
请注意,此代码是为Avr微控制器的Arduino编辑的。特殊的C 语法可能不可用。
您能告诉我如何打电话给b0->attachPop
,为什么要以这种方式打电话?
请注意,我无法修改第三方库,可以在此处找到:https://github.com/itead/iteadlib_arduino_nextion
您只能以这种方式使用静态成员函数(或非成员函数)。幸运的是,您的API通过了一个额外的void*
指针,您可以在其中放置要调用的对象:
class MyNextion {
public:
void init();
void b0PopCallback();
private:
static void b0PopStaticCallback(void *ptr);
NexButton *b0;
};
void MyNextion::b0PopStaticCallback(void *ptr)
{
static_cast<MyNextion*>(ptr)->b0PopCallback();
}
void MyNextion::init()
{
b0 = new NexButton(0, 1, "b0");
b0->attachPop(b0PopStaticCallback, this);
}
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 为什么无法覆盖涉及第三方代码的模板类的运算符<<?
- 与第三方公共图书馆/代码接口
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- 如何调试visual studio 2017生成的C++代码.android中的SO文件和其他第三方库
- gcc 可以使用较旧的第三方库编译 C++17 代码吗?
- 修复第三方代码:"error: ‘enable_if’ in namespace ‘std’ does not name a template type"
- 在Visual Studio 2019中构建简单的点云可视化代码时,来自PCL的第三方库的多个错误
- 该代码注入第三方Qt应用程序并执行一些方法来获取Qt应用程序信息
- 如何在Visual Studio代码中使用第三方DLL
- 如何正确地将指针传递给第三方代码的成员函数
- 仅仅使用(稳定的)第三方库就可以使我的代码无法工作
- 带有反调试代码的第三方库
- 从第三方代码检查库版本
- 当第三方代码中没有警告时,为什么不将所有警告视为错误?
- 第三方代码中的编译时错误(保证有效)
- 分析我的代码(开源)和第三方代码(封闭源代码)的内存使用情况的最佳策略
- 在我的c++应用程序中包含第三方代码时遇到麻烦