Génération de nom de fonctions

Résolu
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 9 sept. 2005 à 10:49
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 9 sept. 2005 à 12:25
Bijour les gens!

J'ai besoin votre avis sur le "problème" suivant:

Dans une fonction, on trouve ce morceau de code:
switch (mode)
{
case 1: Save1bpp(); break;
case 4: Save4bpp(); break;
case 8: Save8bpp(); break;
...
}

Je me demandais si, par hasard, il n'y avait pas moyen (macro par exemple?) d'optimiser l'écriture pour avoir un code du genre: Save[valeur_de_mode]bpp() ?


Si oui, est-il préférable de le faire ou de le laisser tel quel du point de vue performance?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

6 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
9 sept. 2005 à 11:29
Pour ce genre de truc un tableau est mieux. Les macros du genre que j'ai mis sont surtout utile quand un grand nombre de fonction ou autre ont un nom proche qui dépend d'un paramètre constant.
3
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
9 sept. 2005 à 10:56
Si tu fais ca assez souvent peut être qu'un tableau de pointeur sur fonctions sera suffisant
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
9 sept. 2005 à 11:02
#define CASE_MACRO(val) \
case val : Save##val##bpp(); break;

switch(mode)
{
CASE_MACRO(1)
CASE_MACRO(4)
CASE_MACRO(8)
}

Mais bon je suis pas sur que ca arrange ton problème... Un tableau peut auusi être une solution mais comportera des trous apparemment.
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
9 sept. 2005 à 11:22
ymca2003> Merci, c'est ce que je viens de tester:

void Save1(void)
{
std::cout << "Save1" << std::endl;
}


void Save2(void)
{
std::cout << "Save2" << std::endl;
}


#define SAVE(x) Save ## x


int main(int argc,char ** argv)
{
SAVE(2)(); // Ok, ça marche: Save2()

int mode=1;
SAVE(mode)(); // AIE!! Savemode()

system("pause");
return 0;
}

Problème donc quand l'argument de SAVE n'est pas une constante...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
9 sept. 2005 à 11:56
Mouais....m'arrange pas ça...
Sachant que, dans mon cas, la variable "mode" prend les valeurs suivantes: 1,4,8,16,24,32; soit mon tableau aura plein de trous (je pourrais utiliser une map ), soit il me faut trouver une projection de cette suite là sur celle des indices du tableau...

Je vais peut-être laisser comme ça alors...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
9 sept. 2005 à 12:25
salut,

si tu décale de 2 bits vers la droite tu obtient un tableau de 9 valeures.

1 -> 0
4 -> 1
8 -> 2
16 -> 4
24 ->6
32 ->8

@++
0
Rejoignez-nous