如何使用非静态成员函数作为指向函数的指针

How to use non-static member function as pointer to a function?

本文关键字:函数 指针 何使用 静态成员      更新时间:2023-10-16

我正在写RTSP客户端,然后用

创建它
class RtspClientManager
{
private:
    rtsp_client;
    void continueAfterDescribe(RTSPClient* rtspClient, int resultCode, char* resultString);
}
...
rtsp_client = RTSPClient::createNew(*env, szUrl);

我正在发送描述命令:

rtsp_client->sendDescribeCommand(continueAfterDescribe);

我想有一个continueAfterDescribe作为RtspClientManager::continueAfterDescribe实例成员,并有权访问所有成员。

当然continueAfterDescribe可以是一个静态成员函数,但是我只能访问静态成员。如何传递一个指针到一个非静态的成员函数,并有权访问RtspClientManager内的所有实例成员?

RTSPClient方法senddescripbecmand有这样的签名:

unsigned RTSPClient::sendDescribeCommand(responseHandler* responseHandler);
typedef void (responseHandler)(RTSPClient* rtspClient,
             int resultCode, char* resultString);

你不能。必须使用static函数。但是在您的情况下,您可以将RtspClientManager对象作为参数传递给函数,然后使用该对象的其他方法/成员。你的声明也不正确,它们应该是这样的:

typedef void (*responseHandler)(RTSPClient* rtspClient,
         int resultCode, char* resultString);
unsigned RTSPClient::sendDescribeCommand(responseHandler responseHandler);