C++ 使C风格回调面向对象?
我使用的库具有如下回调:C++ 使C风格回调面向对象?,c++,liblacewing,C++,Liblacewing,我使用的库具有如下回调: void onReceive (Lacewing::Server &Server, Lacewing::Server::Client &Client, char * Data, int Size) { /* callback body */ } Server.onReceive (onReceive); /* to register the handler */ class MyProcessingClass {
void onReceive (Lacewing::Server &Server, Lacewing::Server::Client &Client,
char * Data, int Size) {
/* callback body */
}
Server.onReceive (onReceive); /* to register the handler */
class MyProcessingClass
{
public:
MyProcessingClass();
virtual ~MyProcessingClass();
// Do whatever processing in this method
virtual void onReceive(Lacewing::Server &Server, Lacewing::Server::Client &Client);
}
void onReceive (Lacewing::Server &Server, Lacewing::Server::Client &Client,
char * Data, int Size)
{
if ( Data != NULL )
{
MyProcessingClass *handler = reinterpret_cast<MyProcessingClass *>(Data);
handler->onReceive( Server, Client );
}
}
我希望能够将其封装在一个类中,该类可以决定在接收到数据包时执行什么操作(观察者模式)
如何使用C风格的回调实现这一点?库未定义要从中继承的接口
谢谢如果我理解正确,你可以用两种不同的方法 假设此回调结构使用Data参数允许您将自己的数据传递给回调函数(一个常见的范例),您可以这样做:
void onReceive (Lacewing::Server &Server, Lacewing::Server::Client &Client,
char * Data, int Size) {
/* callback body */
}
Server.onReceive (onReceive); /* to register the handler */
class MyProcessingClass
{
public:
MyProcessingClass();
virtual ~MyProcessingClass();
// Do whatever processing in this method
virtual void onReceive(Lacewing::Server &Server, Lacewing::Server::Client &Client);
}
void onReceive (Lacewing::Server &Server, Lacewing::Server::Client &Client,
char * Data, int Size)
{
if ( Data != NULL )
{
MyProcessingClass *handler = reinterpret_cast<MyProcessingClass *>(Data);
handler->onReceive( Server, Client );
}
}
由于您使用的是liblacewing,因此每个类都为用户数据提供了一个
void*标记
成员:
/* class method */
void MyServer::onReceive (Lacewing::Server &Server, Lacewing::Server::Client &Client,
char * Data, int Size)
{
/* callback body - this is inside the class */
}
/* global function wraps the class method */
void onReceive (Lacewing::Server &Server, Lacewing::Server::Client &Client,
char * Data, int Size)
{
((MyServer *) Server.Tag)->onReceive (Server, Client, Data, Size);
}
然后:
是的,第二种方法正是我要处理的:(那么,singleton方法对您有效吗?或者您是否有其他一些要求阻止它的使用?感谢并感谢这个惊人的库:)您知道客户端-服务器类是否在iOS上工作吗?如果没有,是否有计划增加支持?