[conception] Eviter les pointeurs de fonctions
Bonjour,
J'ai un problème de conception au niveau d'une application client/serveur. J'ai construit un protocole, où chaque type de packet à un numéro (packet 1 : chat, packet 2 : combat ...) et où quand je le reçois il faut que j'execute une fonction pour le traiter. La première solution bourrin qui viens à l'esprit :
Code:
1 2 3 4 5 6 7 8 9 10
|
unsigned int ID = get_id_from_packet( packet );
switch( ID )
{
case 1 : chat_packet( packet );
break;
case 2 : war_packet( packet );
break;
// ....
} |
Ca marche avec 2 ID, j'en ai plus de 100 ... Pour des raisons de performances et de "beauté" du code cette solution est à jeter.
La solution actuellement implémentée utilise les pointeurs de fonction.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
typedef void (*ptr_function)( unsigned char * );
ptr_function packet_function[100];
// Ensuite j'initialise chaque packet_function[i] pour pointer vers la fonction qui correspond au packet dont l' ID == i.
packet_function[1] = chat_packet;
packet_function[2] = war_packet;
// ....
// Ce qui me permet de faire à la réception d'un packet :
int ID = get_ID_from_packet( packet );
packet_function[ID]( packet ); |
Ca marche, c'est performant, mais c'est pas beau et c'est une technique que j'utilise en C surtout. Or ici je souhaiterais faire du C++, du vrai ;). Donc je voulais savoir s'il existait une solution de conception pour ce genre de situation ?
Merci beaucoup.