Что-то мне совершенно взрывает мозги boost::signals2, и кстати boost::signals ведет себя точно так же.
Допустим, есть такой код:
#include <iostream>
#include <boost/signals2.hpp>
using namespace std;
using namespace boost::signals2;
class test_class {
public:
int a;
test_class() : a(0) {};
int operator()() {
a++;
return a;
}
};
int main(int argc, char *argv[])
{
signal< int()> sig;
test_class test;
sig.connect(test);
cout << *sig() << endl;
cout << test.a << endl;
}
Он выводит следующее:
$ ./a.out
1
0
Насколько я понимаю всю парадигму сигнал-слотов, sig() должен вызвать test.operator() и соответственно вернуть его значение. По разумной логике, test.a тогда должен быть 0+1=1 в момент получения его значения. А он почему-то 0!
ЧЯДНТ, или где я не понимаю идею?
Сразу оговорюсь, я нашел воркэраунд, но он НАСТОЛЬКО горбатый, что страшно о нем даже думать...
И да, на всякий случай,
//...snip...
cout << test() << endl;
cout << test.a << endl;
//...snip...
$ ./a.out
1
1