boost::bind avec des fonctions qui ont des paramètres qui sont des références
J'ai remarqué que lors du passage des paramètres de référence pour stimuler lier, ces paramètres n'agissent pas comme des références. Au lieu de stimuler crée une autre copie du membre et l'original du passé dans la variable reste inchangé.
Quand j'ai changer les références à des pointeurs, tout fonctionne ok.
Ma question est:
Est-il possible d'obtenir des références pour les travaux, ou au moins de donner une erreur de compilation lors, il essaie d'utiliser des paramètres de référence?
Vous devez vous connecter pour publier un commentaire.
La stimuler la documentation de bind suggère que vous pouvez utiliser boost::ref et boost::cref pour cela.
void increment_int(int& x)
si vous avez accidentellement oubliez pas d'utiliserboost::ref
lorsque vous appelezint tmp = 0
,boost::function<void()> func = boost::bind(f, tmp)
--> lors de l'exécution de la fonction,tmp
ne sera pas augmenté. Au lieu de cela, l'objet créé parboost::bind
enregistre une copie et appelle la fonctionincrement_int
avec la copie. pour plus d'informations, voir ici. J'ai aussi fait en sorte de créer un court, autonome, compilable par exemple pour tester/vérifier ce que j'ai dit.J'ai couru dans un problème similaire attend un paramètre de liaison à être passés par référence à chaque fois que la méthode utilisée dans la liaison a été déclaré à prendre un paramètre de référence. Cependant, ce n'est PAS le cas! Vous devrez explicitement envelopper le paramètre de liaison (c'est-à-passage par référence) dans un boost::ref() ou boost::cref() indépendamment de la façon dont la méthode est déclarée.
Exemple:
maintenant, la liaison suivants:
fait une COPIE de la ClassA objet (ce que je comprends c'est un temporaire de l'affectation et de la méthode appelée devrait pas de conserver une référence à cela, puisque ce n'est pas la référence de l'objet réel, mais à une copie de l'objet).
cependant, la liaison suivants:
sera pas faire une copie, mais l'utilisation d'une référence pour créer la liaison de l'objet.