C ++:可以提高::绑定使用成员函数转换为预期的​​函数指针的签名?

我使用的传递函数指针的方法调用第三方库。

class RTSPClient{ public: ... typedef void (responseHandler)(RTSPClient* rtspClient, int resultCode, char* resultString); ... unsigned sendOptionsCommand(responseHandler* responseHandler, Authenticator* authenticator = NULL); };

正常使用看起来如下:

void continueAfterOPTIONS(RTSPClient* client, int resultCode, char* resultString); .... RTSPClient* pClient; .... pClient->sendOptionsCommand(continueAfterOPTIONS, NULL);

现在我想使continueAfterOPTIONS方法的类的成员函数。 通常我使用boost ::绑定做到这一点:

pRtspClient>sendOptionsCommand(boost::bind(&RtspClientSessionManager::continueAfterOPTIONS, this), NULL);

导致

error C2664: 'RTSPClient::sendOptionsCommand' : cannot convert parameter 1 from 'boost::_bi::bind_t<R,F,L>' to 'RTSPClient::responseHandler (__cdecl *)'

我尝试添加的占位符函数的参数,并且没有什么区别。 就是我试图做可能吗? 有没有可能是一种方法来投的绑定结果呢?

谢谢!

--------------解决方案-------------

不开箱。 然而,让我画出你怎么能做到这一点。

struct Foo : RTSPClient {
boost::function<void(int resultCode, char* resultString)> bound;
Foo(boost::function<void(int resultCode, char* resultString)> bound) : bound(bound) {}

// Need a static method to get a regaulr function pointer
static void CallBack(RTSPClient* _this, int resultCode, char* resultString) {
_this->CallBack(int resultCode, char* resultString
void CallBack(int resultCode, char* resultString) {
bound();
}
};

这当然更容易,如果你能得到你的RtspClientSessionManagerRtspClient

boost::bind生成一个函数对象,它是不是一个指针到功能完全不同的事情。 它是重载的对象operator()

我说这不能用在这里。

你不能这样做的。 所述bind库创建功能对象,而不是真正的功能,以及所产生的指针的类型会有所不同。

分类:C# 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.057 (s). 10 q(s)