Passage d'un tableau de pointeurs de fonctions en argument

Passage d'un tableau de pointeurs de fonctions en argument - C++ - Programmation

Marsh Posté le 10-06-2010 à 10:26:37    

Bonjour à tous.
 
J'ai un petit souci de syntaxe avec les tableaux de pointeurs de fonctions. J'ai fini par comprendre comment les déclarer :

Code :
  1. int (*f[])(int, int) = {f0, f1, f2};


mais pas encore comment les passer en argument d'une fonction. Quelqu'un aurait une idée à ce sujet ?
 
Merci.

Reply

Marsh Posté le 10-06-2010 à 10:26:37   

Reply

Marsh Posté le 10-06-2010 à 10:35:59    

en C++, on utilise des foncteurs ou des boost::function qui ont le bon gout d'avoir une semantique de valeur.
 
Note: boost::function s'appelle aussi std::tr1::function sous certain compilos

Reply

Marsh Posté le 10-06-2010 à 10:42:52    

Et si on suppose que j'ai tout de même envie de faire un tableau de pointeurs de fonctions parce que j'ai pas le temps de m'intéresser là tout de suite à ce qu'est un foncteur ?

Reply

Marsh Posté le 10-06-2010 à 11:01:52    

pour du style C pur et dur, ca devrait passer, ca, non ?

Code :
  1. void plop( int (*f[])(int, int), size_t funcount )
  2. {
  3. // ...
  4. }


 
pour un truc un peu plus C++ :

Code :
  1. typedef vector< int (*)(int, int) > FuncVect;
  2. void plop( const FunctVect& functions )
  3. {
  4. // ...
  5. }


 
et effectivement, pour du code propre et vraiment C++, c'est du foncteur sinon rien comme le propose Joel F.


---------------
last.fm
Reply

Marsh Posté le 10-06-2010 à 11:13:44    

Vais essayer, merci :jap:
 
Et pour répondre à ta question, je ne fais pas de "vrai" code C++. Mon code n'est pas orienté objet, la seule fonction propre au C++ que j'utilise est la surcharge d'opérateur.

Reply

Marsh Posté le 10-06-2010 à 13:53:49    

C++ != orienté objet hein :o

 

Les foncteurs ont en outre l'avantage de preserver l'inlining et autre optimisation du compilo.


Message édité par Joel F le 10-06-2010 à 13:54:28
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed