|
|
|
|
Bonjour,
|
Bonjour,
|
On peut imaginer que la fonction qui prend en paramètre le tableau fasse un switch en fonction de son contenu.
#include <vector>
#include <iostream>
void a(){ std::cout << 'a' << std::endl;}
void b(){ std::cout << 'b' << std::endl;}
void c(){ std::cout << 'c' << std::endl;}
void unk(){ std::cout << "???" << std::endl;}
void do_actions(const std::vector<char> & actions){
const std::size_t n = actions.size();
for(std::size_t i=0;i<n;++i){
switch(actions[i]){
case 'a': a(); break;
case 'b': b(); break;
case 'c': c(); break;
default: unk();break;
}
}
}
int main(){
std::vector<char> actions;
actions.push_back('b');
actions.push_back('a');
actions.push_back('b');
actions.push_back('c');
do_actions(actions);
return 0;
}
ce qui donne à l'exécution...
b a b c Libre à toi de passer des choses plus compliquées dans le vecteur notamment si tu as besoin de passer des paramètres à tes fonctions. Bonne chance |
Bonjour,
#include <iostream>
typedef void funct_t();
void a(){ std::cout << 'a' << std::endl;}
void b(){ std::cout << 'b' << std::endl;}
void c(){ std::cout << 'c' << std::endl;}
void do_actions( funct_t **tableau, unsigned int uNbElements )
{
for ( unsigned int u = 0 ; u != uNbElements ; u++ )
tableau[u]();
}
int main()
{
funct_t *tableau[] = { b, a, b, c };
do_actions( tableau, 4 );
return 0;
}
Ou alors avec des classes et de l'héritage mais ce n'est plus transposable en C. M. (Mon compilo est un peu occupé là, je n'ai as pu tester...) |
Oui, en effet.
|
Oui le void * c'est une solution pour le passage de paramètre. Par contre je ne vois pas trop pourquoi c'est un problème de mettre un switch, d'autant plus qu'on peut avoir envie pour deux valeurs différentes dans le tableau d'appeler une même fonction avec des paramètres différents. On peut certes s'en sortir avec ta méthode mais ça nécessite de passer par une fonction intermédiaire. |
En effet pour appeler une fonction deux fois avec des paramètres différents il faut non plus faire un tableau de fonctions mais de la structure que je suggérais à la fin: struct { fonction, ses paramètres }. Après on se la joue propre ou non. A savoir directement les paramètres après la fonction ou alors un void * vers une structure contenant les paramètres. Je ferais la méthode "sale" avec les paramètres directement.
|