如何将C++成员函数作为参数传递给C API

mic*_*ael 11 c++

在我的C++程序中,我需要调用这个c API:

GConn* gnet_conn_new (const gchar *hostname,
                      gint port,
                      GConnFunc func);
Run Code Online (Sandbox Code Playgroud)

其中GConnFunc定义为:

void (*GConnFunc) (GConn *conn);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我有一个C++类,并有一个成员函数,如:

Class A {
 public:
   A();
   void my_func (GConn* conn);
}
Run Code Online (Sandbox Code Playgroud)

在我的A::A()构造函数,我怎么能传递this->myfuncgnet_conn_new作为GConnFunc参数?

谢谢.

Ash*_*ain 13

大多数API提供指针大小的"用户数据"参数,如下所示:

GConn* gnet_conn_new (const gchar *hostname, 
                  gint port, 
                  GConnFunc func,
                  void* user_data); 
Run Code Online (Sandbox Code Playgroud)

这将允许您在user_data中传递一个实例,并将您的C函数转发给成员函数,如下所示:

void my_func(GConn *conn, void* user_data)
{
    ((MyClass*)user_data)->MyMemberFunc(conn);
}
Run Code Online (Sandbox Code Playgroud)

也许您的API在某处具有替代或类似的"用户数据"参数.否则,如果没有全局或静态,你就无法真正做到这一点.