我有一个C库,需要一个回调函数被注册来定制一些处理。回调函数的类型是int a(int *, int *)
。使用C++类的成员函数为C回调函数
我写类似以下内容并尝试注册一个C++类的函数作为回调函数的C++代码:
class A {
public:
A();
~A();
int e(int *k, int *j);
};
A::A()
{
register_with_library(e)
}
int
A::e(int *k, int *e)
{
return 0;
}
A::~A()
{
}
编译器会引发以下错误:
In constructor 'A::A()',
error:
argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.
我的问题:
- ,首先是有可能像我试图做注册一个C++类memeber功能,如果SO 3 H流? (我读32.8在http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html,但在我看来,这并没有解决问题)
- 是否有替代/更好的办法来解决呢?
是的。该解决方案工作。 (A ::)(A *,int *,int *)'不匹配'int()(int,int *)' – Methos 2009-06-16 10:31:20
它确实存在,但是通过将(答::)这意味着函数是类A的一部分,它从那里暗示了'this'指针。 – GManNickG 2009-06-16 10:37:19
我只是好奇......这是在标准中指定的吗?我只是看了一下关于课程的部分,并没有发现这一点。尽管如此,非常有趣。我只是不会认为每个编译器都必须以这种方式处理非静态成员函数。 – Tom 2009-06-16 10:59:37