将实例方法传递给需要C函数指针的API

布德舍姆

我有一个数据源的C API。为了通知新数据可用,您以函数指针的形式给API提供了回调。数据输入时,将调用您的回调。API的标头包含以下行:

struct DataRecord { ... };
typedef void (*DataCallback)(DataRecord *data);

void set_data_callback(DataCallback processor);

我的C ++类有一个带有签名的实例方法

void MyClass::process_data(DataRecord *data);

在MyClass的构造函数中,我想将新实例的process_data方法设置为C API的数据回调。按照此答案,我尝试在构造函数中编写以下代码:

typedef void (MyClass::data_callback_t)(DataRecord*);
data_callback_t callback = &MyClass::process_data;
set_data_callback(callback);

当我这样做时,我得到了错误

错误C2664:“ set_data_callback”:无法将参数2从“ data_callback_t”转换为“ DataCallback”

没有可以进行这种转换的环境

(我希望使用Visual C ++ 2010 Express,尽管我希望这不会有所作为。)

如何从实例和方法中提取C函数指针?

巴里

你不能 MyClass::process_data可以认为是void(MyClass*, DataRecord*),这是错误的类型。您必须以某种方式将类指针包装到调用中。

一种方法可能是引入带有静态指针的类型:

struct MyClassCallbackHelper
{
    static MyClass* myClass;

    static void callback(DataRecord* record) {
        myClass->process_data(record);
    }
};

这样您就可以:

MyClassCallbackHelper::myClass = this;
set_data_callback(&MyClassCallbackHelper::callback);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将实例方法传递给需要C函数指针的API

来自分类Dev

C将指针矩阵传递给函数的不同方法

来自分类Dev

将指针传递给C ++中的函数

来自分类Dev

将结构指针传递给函数c ++

来自分类Dev

C ++:将指针向量传递给函数

来自分类Dev

C ++将指针数组传递给函数

来自分类Dev

将char指针传递给C函数

来自分类Dev

C - 将指针传递给函数

来自分类Dev

将指针传递给需要数组的函数是否合法?

来自分类Dev

将指针传递给函数

来自分类Dev

将指针传递给函数

来自分类Dev

将指针传递给函数

来自分类Dev

将指针传递给函数

来自分类Dev

将指针传递给函数

来自分类Dev

将Comparable的实例传递给需要比较器的方法

来自分类Dev

将指针传递给函数指针

来自分类Dev

将数组传递给函数-指针与引用(C ++与C)

来自分类Dev

C ++是否有定义的方法将指针传递给类的成员对象的成员函数?

来自分类Dev

如何将C ++ lambda传递给需要函数指针和上下文的C回调?

来自分类Dev

C ++将指针传递给非静态成员函数

来自分类Dev

将字符指针数组传递给C函数

来自分类Dev

使用cgo将函数指针传递给C代码

来自分类Dev

将数组的指针传递给C中的函数

来自分类Dev

C将void指针数组传递给函数

来自分类Dev

将指针传递给C中函数的困惑

来自分类Dev

C指针,了解如何将数组传递给函数

来自分类Dev

将指针传递给接受C ++中的引用的函数

来自分类Dev

将结构数组传递给函数作为指针(C)

来自分类Dev

将指针传递给char数组作为函数的参数-C