ziavengers / ZIA

C++ httpd
2 stars 0 forks source link

bind et passage des parametres. #21

Closed nutsi closed 11 years ago

nutsi commented 11 years ago

Pour le moment, nous avons un bind fonctionnel qui fait de la rétention de paramètres (attention donc a la durée de vie des dit paramètres).

Ca pose des problèmes :

Personnellement, ca ne me dérange pas. D'autant plus, qu'avec ce mecanisme on s'assure que l'appel a la fonction "binder", ne plantera pas (ces parametres existe quoi qu'il ce passe).

entwanne commented 11 years ago

Voici ce que l'on a imaginé au niveau des signaux:

Et le déroulement des opérations:

nutsi commented 11 years ago

@entwanne : la question est comment on stocke le SLOT sans creer le StockCallback, parceque bon je veux bien que l'on ne le cree seulement lors du emit mais ca pose quelque soucis pour son stockage. Il n'y a que cela qui me gene. Pour le disconnect le stockage du pointeur this associer au SLOT va largement simplifier la tache.

entwanne commented 11 years ago

Effectivement, il faut réfléchir à ce problème, et trouver une solution qui permet toujours de passer des paramètres par la suite.

nutsi commented 11 years ago

On peux permettre le bind sans parametre? bind(&myFunc); Et faire le passage des parametres lors de l'appel de operator() mais on au revient a la problematique que j'evoquais dans le premier post.

entwanne commented 11 years ago

Je pense qu'il faudrait une classe (StockSlot ?) qui masquerait 2 éléments: le type de l'objet (pointeur sur fonction, sur méthode, objet), et le type de retour (on l'ignore). Cette classe comporterait 7 méthodes bind templatées (de 0 à 6 paramètres). Elle nous permettrait donc de stocker nos slots. Puis leurs méthodes bind appelleraient notre fonction bind avec les bons paramètres, et retourneraient le StockCallable.

entwanne commented 11 years ago

Ou même, on considère qu'on ne peut que stocker des pointeurs sur méthode (le reste n'a pas de raisons d'être slots). Mais je viens de me rendre compte qu'on aura des problèmes pour mêler templates et virtual.

entwanne commented 11 years ago

J'ai bien trouvé une solution, qui n'utilise même pas bind, mais ça pique un peu: https://gist.github.com/entwanne/905a0dd4d2675a0780b2 Le problème, c'est que le compilateur ne peut exercer aucune vérification sur les types. Donc si on se plante dans un prototype, ça fait de la merde et on voit difficilement pourquoi.

nutsi commented 11 years ago

J'avoue, on peux ce permettre d'assumer le fait que l'on ne peux avoir que des signals sur des Object* et pas de fonctions dites "normales". Ta methode est un peu classe que celle avec bind, mais elle fait son taf. Du coup, bind deviendrait useless -> Oui et non, car on pourra toujours avoir a un moment donner besoin de faire un callback, ne serait-ce que pour le protocole.

slashdevsda commented 11 years ago

compliqué ce topic, hé bé !

entwanne commented 11 years ago

Bon, j'ai trouvé ! J'ai dû modifier quelques trucs, ce n'est pas encore propre, donc pas commit, mais voici les détails:

EUREKA

entwanne commented 11 years ago

Cette fois-ci, c'est la bonne ! Commit dans très peu de temps avec la solution complète.

nutsi commented 11 years ago

Je close.

entwanne commented 11 years ago

Je poste tout de même le lien wiki qui explique comment fonctionne bind et comment l'utiliser: https://github.com/nutsi/ZIA/wiki/Bind