Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2110 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Suivante
Auteur Sujet :

[C++ pour les hommes, les vrais] : les Delegates

n°901484
Lam's
Profil: bas.
Posté le 18-11-2004 à 09:11:27  profilanswer
 

Reprise du message précédent :

HelloWorld a écrit :

Peut-on dire qu'il s'agit d'un delegate de class ?


 
Humour overload.

mood
Publicité
Posté le 18-11-2004 à 09:11:27  profilanswer
 

n°901992
oliv5
Pourquoi ? Parce que !
Posté le 18-11-2004 à 16:51:50  profilanswer
 

Taz a écrit :

je sais pas je comprends rien : y a la moitié des personnes ici qui parle de fonction static et de créer un callback void (*)(void *) et l'autre qui est coincé par qu'ils ont des fonctions membres et des void (*)() ...


 
Moi suis dans la première catégorie :)
 
Bein, pour les callback de windows (EnumerateWindows par exemple), tu ferais comment toi, à la main, sans boost & co, sachant qu'il n'y a pas d'arguments void* data pour passer le pointeur this ?

n°902103
blackgodde​ss
vive le troll !
Posté le 18-11-2004 à 19:16:57  profilanswer
 

bin il va te dire que c de l'api de merde (en plus c'est windows alors !) et qu'il l'utilise pas
 
edit : meme avec boost je voudrais bien voir ...


Message édité par blackgoddess le 18-11-2004 à 20:39:18

---------------
-( BlackGoddess )-
n°902153
Lam's
Profil: bas.
Posté le 18-11-2004 à 20:04:14  profilanswer
 

BlackGoddess a écrit :

bin il va te dire que c de l'api de merde (en plus c'est windows alors !) et qu'il l'utilise pas


... et que de toute façons, il a pas ça sur son iBook Amiga qui tourne sous OpenBSD 2.6 avec kernel Hurd.

n°902200
Kristoph
Posté le 18-11-2004 à 20:56:49  profilanswer
 

oliv5 a écrit :

Moi suis dans la première catégorie :)
 
Bein, pour les callback de windows (EnumerateWindows par exemple), tu ferais comment toi, à la main, sans boost & co, sachant qu'il n'y a pas d'arguments void* data pour passer le pointeur this ?


Moi je reste sur le pool de callback avec un allocateur pour gérer le tout :D

n°902207
Lam's
Profil: bas.
Posté le 18-11-2004 à 21:00:08  profilanswer
 

Kristoph a écrit :

Moi je reste sur le pool de callback avec un allocateur pour gérer le tout :D


C'est un truc de faible ça, non ? Moi je démarre une nouvelle thread à chaque fois, et je lui donne le pointeur this en TLS (Thread Local Storage, pour ceux qui nous lisent).  :sol:  

n°902216
Kristoph
Posté le 18-11-2004 à 21:06:20  profilanswer
 

Lam's a écrit :

C'est un truc de faible ça, non ? Moi je démarre une nouvelle thread à chaque fois, et je lui donne le pointeur this en TLS (Thread Local Storage, pour ceux qui nous lisent).  :sol:


Génération au vol de fichiers DLL sur le disque pour créer de nouveaux callback ?

n°902226
HelloWorld
Salut tout le monde!
Posté le 18-11-2004 à 21:19:13  profilanswer
 

EnumWindows accepte un deuxième argument qui est passé à ta callback...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°902758
oliv5
Pourquoi ? Parce que !
Posté le 19-11-2004 à 13:12:37  profilanswer
 

Ouais, c'est un trés mauvais exemple que j'ai pris...
Passons :)
 
Voila un article interessant : http://www.thecodeproject.com/cpp/FastDelegate.asp
Le type semble avoir testé pas mal de solutions (boost,solution a base de methode static, et autres...). Il explique le pour et le contre et donne une autre solution, plus rapide selon lui. A voir.

n°902763
nithril
Posté le 19-11-2004 à 13:21:40  profilanswer
 

ca fait plaisir de voir quelqu'un utiliser les members functions pointers pr du delegate  :ange:


---------------
http://www.janaga.com
mood
Publicité
Posté le 19-11-2004 à 13:21:40  profilanswer
 

n°1192173
chrisbk
-
Posté le 05-09-2005 à 12:31:12  profilanswer
 

UP [:dawa]

n°1192308
blackgodde​ss
vive le troll !
Posté le 05-09-2005 à 14:38:13  profilanswer
 

up ?


---------------
-( BlackGoddess )-
n°1192329
push
/dev/random
Posté le 05-09-2005 à 14:55:29  profilanswer
 

[:mlc]

n°1192341
masklinn
í dag viðrar vel til loftárása
Posté le 05-09-2005 à 15:14:52  profilanswer
 


[:rofl]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1192366
chrisbk
-
Posté le 05-09-2005 à 15:50:59  profilanswer
 


et oh, merde, c'est le topic C++ le plus intéressant du forome [:dawao]

n°1192374
masklinn
í dag viðrar vel til loftárása
Posté le 05-09-2005 à 15:58:52  profilanswer
 

chrisbk a écrit :

et oh, merde, c'est le topic C++ le plus intéressant du forome [:dawao]


J'ai pas dit le contraire, d'ailleurs je le connaissais pas et j'ai tout lu (et je note que Taz a, avant moi, énoncé le fait que les langages considérant les fonctions comme de vrais objets ça fait quand même un peu plus sérieux que les hacks à coup de delegates :o :o :o) et c'était vachement bien
 
Mais je trouve cet up d'autocongratulation énormé, tu béka pur sucre, chris, je t'aime :jap:


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1192377
In Ze Navy​ II
Obsédée textuelle
Posté le 05-09-2005 à 16:01:53  profilanswer
 

Moi aussi j'ai tout lu, hein, pas la peine de faire le malin :o


---------------
n° 11 * RED * Tiens, voilà ton thé, c'est du café.
n°1192378
chrisbk
-
Posté le 05-09-2005 à 16:03:40  profilanswer
 

je suis flatté, madame [:romf]

n°1192446
0x90
Posté le 05-09-2005 à 17:04:08  profilanswer
 

Je plussoie juste pour l'idée de mettre du code dans une structure et d'y faire pointer un ptr sur fonction ( pardon pour mes faiblesses de languages, je ne suis qu'un simple apprenti codeur C ), c'est du Made-in-Chrisbk ou plus ancien ?


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1192645
chrisbk
-
Posté le 05-09-2005 à 19:31:26  profilanswer
 

bin c'est moi l'auteur du topic, donc c'st de moi [:mlc] enfin je suis pas le premier a avoir eu l'idée, je suppose, mais chui arrivé la tout seul par mes propres deductions, comme un grand [:klem3i1]

n°1192737
tanguy
Posté le 05-09-2005 à 20:39:05  profilanswer
 

Mon implementation des delegates/pattern observer en utilisant boost:
 

Code :
  1. #ifndef EVENT_H
  2. #define EVENT_H
  3. #include <NonCopyable.h>
  4. #include <boost/function.hpp>
  5. #include <boost/bind.hpp>
  6. #include <list>
  7. /**
  8. * Design Pattern Observer.
  9. *
  10. * This class helps to implement the subject part of the observer design pattern.
  11. *
  12. * Uses boost::function in order to simplify the use of the pattern.
  13. * Works a bit like the C# observer pattern that uses delegates and events.
  14. *
  15. * Same syntax as boost::signal. boost::signal cannot be used directly since
  16. * there is an incompatible issue with the Qt library version 3.3.4.
  17. *
  18. * Example (the boost::signal syntax is commented so that one can compare both):
  19. * <pre>
  20. * void showTime(MyTimer * sender, const std::string & time) {
  21. *     std::cout << time << std::endl;
  22. * }
  23. *
  24. * class Clock {
  25. * public:
  26. *     void showTime(MyTimer * sender, const std::string & time) const {
  27. *         std::cout << "Clock: " << time << std::endl;
  28. *     }
  29. * };
  30. *
  31. * class MyTimer {
  32. * public:
  33. *
  34. *     Event<void (MyTimer *, const std::string & )> secondEvent;
  35. *     //boost::signal<void (const std::string & )> secondEvent;
  36. *
  37. *     Event<void (MyTimer *, const std::string & )> minuteEvent;
  38. *     //boost::signal<void (const std::string & )> minuteEvent;
  39. *
  40. *     void tick() {
  41. *         secondEvent(this, "Second Event" );
  42. *         minuteEvent(this, "Minute Event" );
  43. *     }
  44. * };
  45. *
  46. * MyTimer timer;
  47. * Clock clock;
  48. *
  49. * timer.secondEvent += &showTime;
  50. * //timer.secondEvent.connect(&showTime);
  51. * timer.secondEvent += boost::bind(&Clock::showTime, &clock, _1, _2);
  52. * //timer.secondEvent.connect(boost::bind(&Clock::showTime, &clock, _1);
  53. * timer.minuteEvent += boost::bind(&Clock::showTime, &clock, _1, _2);
  54. * //timer.minuteEvent.connect(boost::bind(&Clock::showTime, &clock, _1);
  55. * timer.tick();
  56. *    //Print: Second Event
  57. *    //       Clock: Second Event
  58. *    //       Clock: Minute Event
  59. *
  60. * timer.minuteEvent -= boost::bind(&Clock::showTime, &clock, _1, _2);
  61. * //timer.minuteEvent.disconnect(boost::bind(&Clock::showTime, &clock, _1);
  62. * timer.tick();
  63. *    //Print: Second Event
  64. *    //       Clock: Second Event
  65. * </pre>
  66. *
  67. * A good pratice is to always have the sender as the first parameter of the Event.
  68. */
  69. template<typename Signature>
  70. class Event : NonCopyable {
  71. public:
  72. ~Event() {
  73.  for (typename ObserverList::iterator it = _observerList.begin();
  74.   it != _observerList.end(); ++it) {
  75.    operator-=(it);
  76.  }
  77.  _observerList.clear();
  78. }
  79. /**
  80.  * Adds/attaches an observer to the list of observer.
  81.  *
  82.  * Two identical observers cannot be attached, only one will be:
  83.  * checks first if the same observer was not attached already.
  84.  *
  85.  * Equivalent to boost::signal::connect()
  86.  *
  87.  * @param observer callback function that will observe this object
  88.  */
  89. template<typename Observer>
  90. void operator+=(const Observer & observer) {
  91.  operator-=(observer);
  92.  _observerList.push_back(observer);
  93. }
  94. /**
  95.  * Removes/detaches an observer from the list of observer.
  96.  *
  97.  * Equivalent to boost::signal::disconnect()
  98.  *
  99.  * @param observer callback function to be removed
  100.  * @return if the observer has been removed from the list
  101.  */
  102. template<typename Observer>
  103. bool operator-=(const Observer & observer) {
  104.  typename ObserverList::iterator pos = std::find(_observerList.begin(), _observerList.end(), observer);
  105.  if (pos != _observerList.end()) {
  106.   _observerList.erase(pos);
  107.   return true;
  108.  }
  109.  return false;
  110. }
  111. /**
  112.  * Notifies all the observer from the list that the Subject has been changed.
  113.  */
  114. void operator()() const {
  115.  for (typename ObserverList::const_iterator it = _observerList.begin();
  116.   it != _observerList.end(); ++it) {
  117.    (*it)();
  118.  }
  119. }
  120. template<typename Arg1>
  121. void operator()(const Arg1 & arg1) const {
  122.  for (typename ObserverList::const_iterator it = _observerList.begin();
  123.   it != _observerList.end(); ++it) {
  124.    (*it)(arg1);
  125.  }
  126. }
  127. template<typename Arg1, typename Arg2>
  128. void operator()(const Arg1 & arg1, const Arg2 & arg2) const {
  129.  for (typename ObserverList::const_iterator it = _observerList.begin();
  130.   it != _observerList.end(); ++it) {
  131.    (*it)(arg1, arg2);
  132.  }
  133. }
  134. template<typename Arg1, typename Arg2, typename Arg3>
  135. void operator()(const Arg1 & arg1, const Arg2 & arg2, const Arg3 & arg3) const {
  136.  for (typename ObserverList::const_iterator it = _observerList.begin();
  137.   it != _observerList.end(); ++it) {
  138.    (*it)(arg1, arg2, arg3);
  139.  }
  140. }
  141. template<typename Arg1, typename Arg2, typename Arg3, typename Arg4>
  142. void operator()(const Arg1 & arg1, const Arg2 & arg2, const Arg3 & arg3, const Arg4 & arg4) const {
  143.  for (typename ObserverList::const_iterator it = _observerList.begin();
  144.   it != _observerList.end(); ++it) {
  145.    (*it)(arg1, arg2, arg3, arg4);
  146.  }
  147. }
  148. private:
  149. /**
  150.  * Type list of observer.
  151.  */
  152. typedef std::list<boost::function<Signature> > ObserverList;
  153. /**
  154.  * The vector/collection/list of observer.
  155.  */
  156. ObserverList _observerList;
  157. };
  158. #endif //EVENT_H


 
Teste sous GCC-4.0.2 et Visual C++ 7.1
L'interet d'utiliser boost::function et boost::bind c'est que cela fera parti du futur standard C++.


Message édité par tanguy le 05-09-2005 à 20:43:23
n°1193013
HelloWorld
Salut tout le monde!
Posté le 06-09-2005 à 09:35:37  profilanswer
 

T'es sûr ? T'as vu ça où ?
On avait parlé de boost dans ce topic il me semble. Ici, il s'agit de filer un truc en tant que callback à une fonction C 1 paramètre. Tu peux pas filer ton Event.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1193014
chrisbk
-
Posté le 06-09-2005 à 09:36:39  profilanswer
 

ouais, personne comprends rien a la puissance absolue de mon code, ca me saoule, je suis un incompris

n°1193019
chrisbk
-
Posté le 06-09-2005 à 09:38:55  profilanswer
 

en plus mon code il est compact, pas comme ce gros bloatage de template

n°1193025
HelloWorld
Salut tout le monde!
Posté le 06-09-2005 à 09:48:03  profilanswer
 

P'têt que c'est parce que les gens ils ne connaissent plus les callback mais que les foncteurs template :gratgrat:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1193028
chrisbk
-
Posté le 06-09-2005 à 09:50:38  profilanswer
 

Tu me blagues ? la moitiés des "gens" foutent tout en public, font encore du malloc et utilisent FILE *dans leur C++, alors tes foncteurs templates....
 
Nan, mon code est le meilleur, je suis un génie.

n°1193030
blackgodde​ss
vive le troll !
Posté le 06-09-2005 à 09:50:57  profilanswer
 

chrisbk a écrit :

ouais, personne comprends rien a la puissance absolue de mon code, ca me saoule, je suis un incompris


 
bin si c'est interressant je trouve, mais il y a des inconvenients aussi, comme par exemple si la mémoire allouée n'est pas executable, ou qu'il diffère suivant la convention d'appel (ce qui a déjà été évoqué).


---------------
-( BlackGoddess )-
n°1193036
chrisbk
-
Posté le 06-09-2005 à 09:54:07  profilanswer
 

je vais m'immoler avec mon code, le monde ne me mérite pas

n°1193038
chrisbk
-
Posté le 06-09-2005 à 09:59:34  profilanswer
 

ouais, pour cdecl y'a a priori pas moyen, mais de toute facon c'est une convention d'appel a la con

n°1196025
stiffler
Lâche mon profil putain ! :o
Posté le 09-09-2005 à 15:14:30  profilanswer
 

[:dawa]

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Vraie rencontre pour vrais gens :o[Perl/Tk] Les VRAIS curseurs de souris de windows, ou ki sont??
Comment évaluer, en gros, les jours/hommes d'un dev à réaliser ? 
Plus de sujets relatifs à : [C++ pour les hommes, les vrais] : les Delegates


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR