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

 


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

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

n°900273
Taz
bisounours-codeur
Posté le 16-11-2004 à 23:26:38  profilanswer
 

Reprise du message précédent :
c'est pas ça du tout. les fonctions membres non-static ne sont tout simplement pas des fonctions comme les autres fonctions libres. Si y avait que cette histoire de this implicite, on se marrerait bien.

mood
Publicité
Posté le 16-11-2004 à 23:26:38  profilanswer
 

n°900283
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-11-2004 à 23:35:16  profilanswer
 

Taz a écrit :

c'est pas ça du tout. les fonctions membres non-static ne sont tout simplement pas des fonctions comme les autres fonctions libres. Si y avait que cette histoire de this implicite, on se marrerait bien.

oui mais le sujet de ce topic consiste justement à expliquer comment contourner le this implicite, le reste est HS :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°900290
Taz
bisounours-codeur
Posté le 16-11-2004 à 23:42:56  profilanswer
 

si t'avais vu un peu le code de chrisbk, tu verrais que la principale difficulté, c'est de récupérer le pointeur de la fonction membre et d'invoquer tout le fatras correctement

n°900295
chrisbk
-
Posté le 16-11-2004 à 23:49:59  profilanswer
 

Taz a écrit :

si t'avais vu un peu le code de chrisbk, tu verrais que la principale difficulté, c'est de récupérer le pointeur de la fonction membre et d'invoquer tout le fatras correctement


 
bah c chiant a recuperer parce que les compilos bloquent au niveau du type. Invoquer le fatras ca va, la seule blague c'est de passer le param 'this' supplémentaire, justement

n°900303
Jubijub
Parce que je le VD bien
Posté le 17-11-2004 à 00:06:11  profilanswer
 

g compris l'explication d'Harko...


---------------
Jubi Photos : Flickr - 500px
n°900316
Kristoph
Posté le 17-11-2004 à 00:49:45  profilanswer
 

Quand j'ai vu ce post, je me suis dis : chouette, je vais enfin savoir ce que les gens entendent par delegate. Je commence à lire et je dis "Quoi ? C'est tout ? Et c'est quoi ce hack pour faire marche ce truc si simple en plus ?"
 
En fait, les delegate, c'est juste une façon compliquée de nommer des bound methods. Et je ne parle même pas de la currification des fonctions dans les langages fonctionnels qui permet de faire tout ça en bien plus encore.
 
Une raison sur le pourquoi de ce changement de nom ? Ou alors c'est le terme "bound method" qui arrivé en deuxième peut-être ?

n°900320
Jubijub
Parce que je le VD bien
Posté le 17-11-2004 à 01:07:02  profilanswer
 

nraynaud sors de kristoph


---------------
Jubi Photos : Flickr - 500px
n°900326
Taz
bisounours-codeur
Posté le 17-11-2004 à 01:23:18  profilanswer
 

ben parce que c'est pas dans C++. Pour faire ça, on a STL et boost qui font des trucs nickel. En C#, on a des delegate pour pas avoir à se taper des interfaces à la con dans tous les sens. Appelle ça comme tu veux, mais c'est clair que ça vaut pas les truc simplissimes où 'obj.method' est effectivement un objet à par entière :/

n°900327
Kristoph
Posté le 17-11-2004 à 01:29:16  profilanswer
 

Taz a écrit :

ben parce que c'est pas dans C++. Pour faire ça, on a STL et boost qui font des trucs nickel. En C#, on a des delegate pour pas avoir à se taper des interfaces à la con dans tous les sens. Appelle ça comme tu veux, mais c'est clair que ça vaut pas les truc simplissimes où 'obj.method' est effectivement un objet à par entière :/


La currification, il n'y a que ça de vrai pour les langages statiquement typés. D'ailleurs, je viens de voir boost::bind et c'est vraiment très bien ce truc. Dommage que la syntaxe fasse "hack" mais bon c'est surement le mieux qu'ils pouvaient faire sans changer le langage.

n°900328
Taz
bisounours-codeur
Posté le 17-11-2004 à 01:32:57  profilanswer
 

yep. boost:: bind, function, lambda and signals sont vraiment chouettes

mood
Publicité
Posté le 17-11-2004 à 01:32:57  profilanswer
 

n°900432
HelloWorld
Salut tout le monde!
Posté le 17-11-2004 à 10:50:16  profilanswer
 

Joel F a écrit :

Je le fait toute la journée :o


Réflexion faite, ma curiosité est devenue du scepticisme. Pour ce que j'en ai vu, boost::function est un foncteur un peu sofistiqué, donc en gros c'est l'opérateur () qui fait le boulot. Qui dit opérateur dit fonction membre, donc pointeur this. Or le sujet de ce débat est qu'on peut pas passer ça à une callback C...
Donc aux chiottes boost::function :o
 
Quant à l'histoire delegate <=> currification, c'est pas un renommage. Delegate c'est un pricipe, un Design Pattern même il me semble. Après qu'il soit mis en place via la currification ou les templates, c'est autre chose.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°900463
chrisbk
-
Posté le 17-11-2004 à 11:15:19  profilanswer
 

soPHistiqué :o
 
Sinon hein, t'as vu, y lisent rien au post initial et ca vient faire les cacous avec des trucs qui n'ont rien a voir [:el g]


---------------
NP: HTTP Error 764 Stupid coder found
n°900471
Taz
bisounours-codeur
Posté le 17-11-2004 à 11:16:33  profilanswer
 

HelloWorld a écrit :

Delegate c'est un pricipe, un Design Pattern même il me semble.

ça existe le design pattern 'j'ai pas de pointeur de fonction ni de méthode liée, alors j'émule' ?

n°900487
Lam's
Profil: bas.
Posté le 17-11-2004 à 11:26:23  profilanswer
 

C'est comme le Singleton ou le VirtualStatic: c'est pas un Design Pattern, c'est un idiome.

n°900532
Kristoph
Posté le 17-11-2004 à 12:00:44  profilanswer
 

HelloWorld a écrit :

Quant à l'histoire delegate <=> currification, c'est pas un renommage. Delegate c'est un pricipe, un Design Pattern même il me semble. Après qu'il soit mis en place via la currification ou les templates, c'est autre chose.


 
C'est un cas particulier de currification avec un nouveau nom pour faire plaisir aux fans d'objet et pour leur faire croire qu'ils ont inventé un nouveau concept génial :o

n°900545
el muchach​o
Comfortably Numb
Posté le 17-11-2004 à 12:24:04  profilanswer
 

Lam's a écrit :

C'est comme le Singleton ou le VirtualStatic: c'est pas un Design Pattern, c'est un idiome.


 
De toute façon, le terme même de design pattern est volontairement flou, ça pourrait signifier grossièrement "technique de programmation". Il y a quantité de design patterns qui ne sont là que pour pallier à des déficiences de langage, et qui n'ont pas lieu d'exister dans d'autres langages.


Message édité par el muchacho le 17-11-2004 à 12:25:39
n°900560
Lam's
Profil: bas.
Posté le 17-11-2004 à 12:47:19  profilanswer
 

el muchacho a écrit :

De toute façon, le terme même de design pattern est volontairement flou, ça pourrait signifier grossièrement "technique de programmation". Il y a quantité de design patterns qui ne sont là que pour pallier à des déficiences de langage, et qui n'ont pas lieu d'exister dans d'autres langages.


Oui.
Un DP, c'est la solution à un problème donné, avec un nom, une suggestion d'implémentation, et les conditions d'utilisations/limites du système proposé.  
 
Un DP peut donc être un idiome (exemple: Singleton), un ensemble de classes (Composite), ou un ensemble de DP (MVC).
 
Mais si ton problème n'est pas spécialement particulier, s'il ne s'applique qu'à un seul langage, et s'il n'y a pas de réél cas où il faut l'utiliser ou s'en passer (pas d'antipatterns), il y a des chances pour que ce ne soit pas un DP très intéressant: juste un bon idiome.  
 
Le Delegate Colgate est très bien, mais ce n'est pas franchement un DP qui va révolutionner le monde.
 
C'est comme ça que je vois les choses en tout cas.

n°900586
oliv5
Pourquoi ? Parce que !
Posté le 17-11-2004 à 13:16:17  profilanswer
 

Taz a écrit :

c'est pas ça du tout. les fonctions membres non-static ne sont tout simplement pas des fonctions comme les autres fonctions libres. Si y avait que cette histoire de this implicite, on se marrerait bien.


 
Plusieurs choses/questions :
1) HA. Je n'étais conscient que du pb du ptr this.
Il y a quoi comme autres pbs que le pointeur this ?
 
2) je connaissais que la solution proposée par Harkonnen (Dans une classe wrapper, faire une méthode static, conserver le ptr this, passer la méthode static a la callback, appeler la vraie callback dans la methode static) ou encore l'emploi de la lib boost::function (que je n'ai jamais utilisée dans ce contexte. D'ailleurs, c'est facile  
à utiliser ?).
Merci de proposer cette autre solution, que je trouve assez couillue :)

n°900919
Taz
bisounours-codeur
Posté le 17-11-2004 à 17:37:10  profilanswer
 

d'abord c'est la méthode de personne le coup du static. Et Harko est arrivé comme un cheveux sur la soupe. Utilise boost::function. Je sais pas ce que tu trouve couillu, mais du dois être sacrément poilu de la paume pour ne pas avoir été lire la documentation/tutoriel/exemple de boost.

n°900931
chrisbk
-
Posté le 17-11-2004 à 17:45:25  profilanswer
 

Oué bon on va laisser tomber, hein ?


---------------
NP: HTTP Error 764 Stupid coder found
n°900937
HelloWorld
Salut tout le monde!
Posté le 17-11-2004 à 17:48:44  profilanswer
 

Nan, y'a Joel F qui bosse encore dessus.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°900946
chrisbk
-
Posté le 17-11-2004 à 17:59:58  profilanswer
 

on attends tjs son bout de code [:itm]
Mais la je sens qu'on va tourner en rond, avec boost si, boost ca, mais j'ai tjs pas vu de code qui bindait une fonction membre sur une vieille callback C pourrie. Pis crotte, quoi, voir meme, maÿrde


---------------
NP: HTTP Error 764 Stupid coder found
n°900953
HelloWorld
Salut tout le monde!
Posté le 17-11-2004 à 18:12:37  profilanswer
 

C'est qu'il bosse tard le bonhome.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°900956
oliv5
Pourquoi ? Parce que !
Posté le 17-11-2004 à 18:18:38  profilanswer
 

Taz a écrit :

d'abord c'est la méthode de personne le coup du static. Et Harko est arrivé comme un cheveux sur la soupe. Utilise boost::function. Je sais pas ce que tu trouve couillu, mais du dois être sacrément poilu de la paume pour ne pas avoir été lire la documentation/tutoriel/exemple de boost.


 
Bon, ok, je l'avoue, je m'attendais a cetet réaction... Tu n'es plus drole Taz, t'es trop prévisible :(
Accéssoirement, j'aurais bien aimé que tu répondes a ma première question.
 
Quant à la question sur boost, non, j'ai pas lu la doc, je te demande un avis perso. Facile a utiliser, des choses a savoir de particulier, conseils d'utilisations ? Je ne lis la doc que si je m'apprete a l'utiliser, et je choisirais en fonction (en partie) de tes remarques a ce sujet, si tu veux bien en formuler. Je n'ai plus de temps a perdre a eplucher des API pour le dev perso.
 
Ne sois pas jaloux non plus, harkonnen a donné en premier la methode que j'utilise depuis qques temps, j'ai pas dit que c'etait la sienne, hein...
 
Edit : ha oui, ce que je trouve "couillu", c'est l'idée d'utiliser une structure pour placer des instructions de sauts vers une autre portion de code. Je m'incline devant celui qui a eu le premier cette idée (qui n'est pas parmi nous), car perso, je n'y aurais pas pensé.  


Message édité par oliv5 le 17-11-2004 à 18:23:08
n°900966
Joel F
Real men use unique_ptr
Posté le 17-11-2004 à 18:32:14  profilanswer
 

En vrac parce que moi je bosse :kaola:
 
http://www.crystalclearsoftware.co [...] _Callbacks

n°900970
Lam's
Profil: bas.
Posté le 17-11-2004 à 18:35:08  profilanswer
 

Ouais enfin, du code C-style, j'en fait en Java aussi, hein. Ca n'en fait pas du code appellable depuis le C pour autant.
:p

n°900985
HelloWorld
Salut tout le monde!
Posté le 17-11-2004 à 18:46:27  profilanswer
 

exact

Citation :

This article describes how to use Boost.Function to make a C-style callback (implemented with a function pointer and a user data pointer) into a callback that can handle arbitrary function objects or functions.


Ca nous explique comment faire des callback dans un esprit plus C++ boost, mais pas comment refiler notre fonction membre en tant que fonction callback C.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°900988
Lam's
Profil: bas.
Posté le 17-11-2004 à 18:49:51  profilanswer
 

HelloWorld a écrit :


Ca nous explique comment faire des callback dans un esprit plus C++ boost, mais pas comment refiler notre fonction membre en tant que fonction callback C.


 
Justement, je me demandais : c'est lequel le meilleur langage de programmation ?
 
 
 
 
 
 
 
 
 
 
 
 
 
[:dehors2]

n°901033
Kristoph
Posté le 17-11-2004 à 19:58:20  profilanswer
 

chrisbk a écrit :

on attends tjs son bout de code [:itm]
Mais la je sens qu'on va tourner en rond, avec boost si, boost ca, mais j'ai tjs pas vu de code qui bindait une fonction membre sur une vieille callback C pourrie. Pis crotte, quoi, voir meme, maÿrde


Je vois bien une solution avec un pool de fonctions callback génériques et un allocateur mais ça ne scale pas très bien :D

n°901073
Taz
bisounours-codeur
Posté le 17-11-2004 à 20:35:52  profilanswer
 

ce qui est bien c'est que t'as vachement bien assimilé le moment où on a dit 'si y avait un void* data a filé au callback, y aurait aucun problème'

n°901153
Joel F
Real men use unique_ptr
Posté le 17-11-2004 à 21:16:25  profilanswer
 

quoi encore ?

n°901160
chrisbk
-
Posté le 17-11-2004 à 21:19:11  profilanswer
 

Jcrois qu'il est dans une mauvaise passe le Taz, d'hab' il me rapelle un caillou dans la chaussure mais la ca tiens plus de la gastro carabinée [:itm]

n°901277
HelloWorld
Salut tout le monde!
Posté le 17-11-2004 à 22:17:26  profilanswer
 

Alors attention ça va faire mal. Il fallait bien 2 jours pour la trouver celle là.
Ton delegate, il permet d'appeler des fonctions membres de classes n'est-ce pas ? Peut-on dire qu'il s'agit d'un delegate de class ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°901278
chrisbk
-
Posté le 17-11-2004 à 22:20:23  profilanswer
 

heuh [:le kneu]

n°901289
schnapsman​n
Zaford Beeblefect
Posté le 17-11-2004 à 22:27:38  profilanswer
 

OMFG IWHBATW http://www.microserfs.net/HFR/petrus/xppetrus.gif

n°901351
Taz
bisounours-codeur
Posté le 17-11-2004 à 23:24:19  profilanswer
 

Joel F a écrit :

quoi encore ?

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 (*)() ...

n°901352
Joel F
Real men use unique_ptr
Posté le 17-11-2004 à 23:25:35  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 j'ai rien dit

n°901364
Taz
bisounours-codeur
Posté le 17-11-2004 à 23:38:01  profilanswer
 

bah t'es dans la première catégorie :P

n°901367
Joel F
Real men use unique_ptr
Posté le 17-11-2004 à 23:44:32  profilanswer
 

ben tant pis, j'ai jamais rien utilisé d'autre que boost::function alors tu sais [:spamafote]

n°901374
Taz
bisounours-codeur
Posté le 17-11-2004 à 23:50:02  profilanswer
 

bah moi pareil. Les cb C mal foutus, ça pue. Mais je vomis également les API C et leur void* ça fout tout le typage en l'air, surtout quand dans le dit void* y a un int ... :grrrrr: gtk+ :o Surtout que grâce à ces callback à la con, zéro inlining : même pour enculer une mouche avec un g_array_foreach ... c'est à pleurer

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

HelloWorld a écrit :

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


 
Humour overload.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

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-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)