相关疑难解决方法(0)

使用C++类成员函数(不能是静态的)作为C回调函数

我有一个C库函数,需要一个函数指针用于回调,我想传入一个C++成员函数.C++函数修改了一个成员变量,所以我不能使用静态自由函数(如几个类似的帖子所示).我的尝试(如下所示)因编译器错误而失败.

这篇文章最接近我的要求:

使用C++类成员函数作为C回调函数

如果没有静态函数,我怎么能这样做?谢谢!


test.h

#ifndef TEST_H_
#define TEST_H_

#ifdef __cplusplus
extern "C" {
#endif

typedef void (*handler_t)(int foo, void *bar);

void set_handler(handler_t h);

#ifdef __cplusplus
}
#endif

#endif
Run Code Online (Sandbox Code Playgroud)

test.c的

#include "test.h"
#include <stdlib.h>

static handler_t handler_ = NULL;
void set_handler(handler_t h) {
        handler_ = h;
}

void handle_event(int foo, void *bar) {
        if (handler_ != NULL) handler_(foo, bar);
}
Run Code Online (Sandbox Code Playgroud)

TEST.CPP

#include "test.h"
#include <iostream>
using namespace std;

class Foo {
public:
        Foo() : ctr_(0) {};

        // handler needs to …
Run Code Online (Sandbox Code Playgroud)

c c++

6
推荐指数
1
解决办法
5222
查看次数

将合格的非静态成员函数作为函数指针传递

我在外部库中有一个函数,我无法使用以下签名进行更改:

void registerResizeCallback(void (*)(int, int))
Run Code Online (Sandbox Code Playgroud)

我想传递一个成员函数作为回调,因为我的回调需要修改实例变量.

显然,这是不可能的简单:

registerResizeCallback(&Window::Resize);
Run Code Online (Sandbox Code Playgroud)

所以我不确定如何解决这个问题.

c++

4
推荐指数
2
解决办法
3345
查看次数

标签 统计

c++ ×2

c ×1