Classe virtuelle et casting après un échange socket
Bonjour,
Voila mon problème. J'ai une application qui se baserait sur une classe Client/Server qui fait transiter des tickets (une structure de donnée) au travers de sockets (plus un broadcast mpi mais ça c'est un détails).
Voici mon pseudo code.
Je définie une classe abstraite ticket:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
class Ticket
{
protected:
int type;
double duration;
public:
Ticket();
virtual std::string create_display() const=0;
// Plus autres methodes virtuelles
// ...
}; |
Exemple coté client:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
void ClientServer::client_loop()
{
void* buf_ticket=malloc(max_size_ticket());
memset(buf_ticket,0,max_size_ticket());
while (true)
{
socket_mgr_recv_server(handle,buf_ticket,max_size_ticket());
// Quel est le bon cast qui me permet de récupérer le vtable
// et appeler la bonne méthode (ex: create_display)
Ticket* ticket=CAST?(buf_ticket);
printf("Display ticket: %s\n",ticket->create_display().c_str());
process_ticket(ticket);
// ...
}
} |
Tout est dans le commentaire.
Quel cast me permet de donner la bonne forme à mon objet qui a transité par socket?
Sachant qu'en plus il y a un mécanisme d'échange MPI qui n'est pas écrit dans le pseudo code. Mais l'idée est là. On fait transiter une classe comme un void* et de l'autre coté (dans un autre process) on veut retrouver la bonne classe fille.
Est ce que c'est possible?
Si oui quel cast (ou autre mécanisme) me permet le faire?
Merci d'avance