Se ho capito bene, si poteva fare 2 modi diversi.
Supponendo che questa struttura callback sta usando il parametro dei dati per consentire di passare i propri dati alla funzione di callback (un paradigma comune), si potrebbe fare così:
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);
}
}
Oppure, se il il puntatore dati è qualcosa che devi elaborare invece di un "puntatore dati utente", probabilmente dovresti usare un singleton, una sorta di variabile globale o qualcosa di simile. Nella mia esperienza, questo è un modo meno comune di utilizzare i callback e, si spera, non è quello con cui hai a che fare.
MyProcessingClass g_Processor;
MyProcessingClass *GetProcessor()
{
return &g_Processor; // or some other way of getting your instance
}
void onReceive (Lacewing::Server &Server, Lacewing::Server::Client &Client,
char * Data, int Size)
{
MyProcessingClass *handler = GetProcessor();
if (handler != NULL)
{
handler->onReceive(Server, Client);
}
}
fonte
2012-05-13 23:33:17
Grazie e grazie per questa fantastica libreria :) it per sapere se le classi Client Server funzionano su iOS? Se non lo fanno, ci sono piani per aggiungere supporto? – jmasterx