FUNCTOR vs static

FUNCTOR vs static - C++ - Programmation

Marsh Posté le 26-10-2009 à 22:00:14    

Code :
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4. struct Functor{
  5. bool operator()(const std::string&  str){cout<<str<<endl;return true;}
  6. };
  7. struct Functor2{
  8. static bool compute(const std::string&  str){cout<<str<<endl;return true;}
  9. };
  10. struct Foo
  11. {
  12. template<class F>
  13. void callMe()
  14. {
  15.  F()("operator ()" );
  16. }
  17. template<class F>
  18. void callMe2()
  19. {
  20.  F::compute("static" );
  21. }
  22. };
  23. int main(int n,char ** arfv)
  24. {
  25. Foo  obj;
  26. obj.callMe<Functor>();
  27. obj.callMe2<Functor2>();
  28. system("pause" );
  29. }


 
 
Si l'on veut passer une fonction en paramètre quelle méthode est-il préférable d'utiliser ? functor ou functor2 ?
 
Merci.


---------------
.
Reply

Marsh Posté le 26-10-2009 à 22:00:14   

Reply

Marsh Posté le 26-10-2009 à 22:30:44    

Presque aucune des deux. L'idiome classique pronée par le standard est :
 

Code :
  1. template<class Fun> void callMe( Func f)
  2. {
  3. f("operator ()" );
  4. }

Reply

Marsh Posté le 26-10-2009 à 22:32:14    

la méthode static présente quel inconvénient ?


---------------
.
Reply

Marsh Posté le 26-10-2009 à 22:34:51    

quelle est statique tiens :o qui dit methode statique, dit etat statique si besoin d'un etat et qui dit etat statique dit non reentrance.
 
Le functor instanciable permet de stocker fonction+etat et d'appeler à la volée (cf pattern Command par exemple)

Reply

Marsh Posté le 26-10-2009 à 22:51:28    

tiens d'ailleurs en parlant de reentrance, quels sont les conditions pour qu'une fonction en C++ le soit ? quelle soit non static déjà ok mais quoi d'autre?


Message édité par Glock 17Pro le 26-10-2009 à 22:55:33

---------------
.
Reply

Marsh Posté le 26-10-2009 à 23:06:26    

ne pas utiliser de données statiques (sauf si elle sont constantes), n'utiliser que des données fournies par l'appelant, ne pas appeler de fonction non-réentrante


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
Reply

Marsh Posté le 26-10-2009 à 23:08:33    

j'ai lu vite fait qu'un langage comme ADA se prêtait mieux que le C++ pour la programmation parallèle / concurrente , info ou intox ?


---------------
.
Reply

Marsh Posté le 27-10-2009 à 06:55:19    

info. Tout comme tous les languages fonctionels (LISP, HASKELL, CAML et consoeurs)

Reply

Marsh Posté le 27-10-2009 à 07:55:22    

et avec la prochaine mouture du C++ ou le développement de lib tierce, on ne peux pas espérer qu'un jour le C++ s'en tire mieux dans ce domaine ?


---------------
.
Reply

Marsh Posté le 27-10-2009 à 09:08:38    

Glock 17Pro a écrit :

j'ai lu vite fait qu'un langage comme ADA se prêtait mieux que le C++ pour la programmation parallèle / concurrente , info ou intox ?


les taches c'est le (seul :o) bonheur en Ada :D


Message édité par Aiua le 27-10-2009 à 09:08:52

---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
Reply

Sujets relatifs:

Leave a Replay

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