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:
Exemple coté client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 // ... };
Tout est dans le commentaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); // ... } }
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
Partager