Bonjour,
j'utilise signal et j'ai besoins de faire suivre un signal.
En gros de pouvoir connecter un signal sur un autre sans refaire l'émission dans un slot intermédiaire.
Savez vous si cela est possible directement dans signal?
Bonjour,
j'utilise signal et j'ai besoins de faire suivre un signal.
En gros de pouvoir connecter un signal sur un autre sans refaire l'émission dans un slot intermédiaire.
Savez vous si cela est possible directement dans signal?
en tout cas, y'a pas ca dans le tutorial. j'y ai pensé un jour aussi parce que je voulais connecter un même slot sur plusieurs signaux, ce qui normalement est sensé fonctionner. mais pour moi ca n'a jamais marché, peut etre parce que je stockait le slot qui était 'setté' par un acteur exterieur (dans un scoped_ptr) en attendant de se faire connecter. finalement j'ai changé le concept en faisant comme toi, un solt intermediaire qui relance un signal a un autre slot.
du coup bof bof. mais je ne crois pas que ca ait trop de sens ce qu'on veut en fait. pourquoi ne pas utiliser le multi slot ? on peut tres bien connecter avec connect(1, myslot) et connect(2, myslot2) pour avoir des appels qui respectent un ordre. (voir tutoriel pour syntaxe exacte)
ca devrait etre suffisant en fait.
Salut,
Je me demande si j'ai bien compris la question
Car sinon qu'est ce qui t'empêche de connecter comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include <iostream> #include <boost\signal.hpp> #include <boost\bind.hpp> #include <boost\lexical_cast.hpp> #include <string> void do_it(int i_) { std::cout<<"do_it - "<<i_<<"\n"; } int main() { boost::signal<void (int)> sig1; sig1.connect(do_it); sig1(1); boost::signal<void ()> sig2; sig2.connect(boost::bind(boost::cref(sig1),2)); sig2(); boost::signal<void (std::string,int)> sig3; sig3.connect(boost::bind(boost::cref(sig1),_2)); sig3("3",3); boost::signal<void (std::string)> sig4; sig4.connect(boost::bind(boost::cref(sig1),boost::bind(boost::lexical_cast<int,std::string>,_1))); sig4("4"); return 0; }
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Bonjour et merci pour vos réponses.
3DArchi:
Je pense que c'est ce que je cherchai je vais essayer ça.
Merci.
Partager