我有一个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) 我在外部库中有一个函数,我无法使用以下签名进行更改:
void registerResizeCallback(void (*)(int, int))
Run Code Online (Sandbox Code Playgroud)
我想传递一个成员函数作为回调,因为我的回调需要修改实例变量.
显然,这是不可能的简单:
registerResizeCallback(&Window::Resize);
Run Code Online (Sandbox Code Playgroud)
所以我不确定如何解决这个问题.