1
42
을 출력하려면 다음과 같은 전체 프로그램이 필요하지만, 0
을 출력합니다. 왜?부스트 신호 2 신호에서 호출 된 펑터의 멤버 변수가 업데이트되지 않습니다.
int main(int argc, char* argv[]) {
TestFunctor f;
f(42);
std::cout << f.last_received_value << std::endl;
return 0;
}
나는 문제가 TestFunctor
인스턴스의 복사본이 실제로 신호에 매여되고 있음을 의심 : main()
는 다음으로 대체 된 경우
#include <iostream>
#include <boost/signals2/signal.hpp>
class TestFunctor {
public:
TestFunctor() : last_received_value(0) {}
void operator()(const int& i) {
last_received_value = i;
};
int last_received_value;
};
int main(int argc, char* argv[]) {
TestFunctor f;
boost::signals2::signal<void(const int& i)> sig;
sig.connect(f);
sig(42);
std::cout << f.last_received_value << std::endl;
return 0;
}
, 내가 예상 출력 42
를 얻을. 이 문제를 어떻게 방지 할 수 있습니까?
Perfect. 감사. – Steve