2
나는 이런 식으로 뭔가를 할 노력하고있어 : 당신은 실제로 정말 가까이있어boost.thread와 함께 boost.lambda를 사용하여 스레드의 반환 값을 얻으려면 어떻게해야합니까?
cannot convert parameter 1 from 'boost::arg' to 'int'
나는 이런 식으로 뭔가를 할 노력하고있어 : 당신은 실제로 정말 가까이있어boost.thread와 함께 boost.lambda를 사용하여 스레드의 반환 값을 얻으려면 어떻게해야합니까?
cannot convert parameter 1 from 'boost::arg' to 'int'
:
using namespace boost::lambda;
using boost::thread;
int add(int a, int b) {return a+b;}
int sum, x=2, y=6;
thread adder(var(sum) = add(_1, _2), x, y);
adder.join();
cout << sum;
나는 컴파일 오류가 발생합니다! 문제는 Lambda의 자리 표시자를 사용하여 add()를 직접 호출한다는 것입니다. Lambda 내부에서 느리게 평가되지는 않지만 곧바로 평가됩니다. 여기
는 고정 된 버전입니다 :using namespace boost::lambda;
using boost::thread;
int sum, x=2, y=6;
thread adder(var(sum) = _1 + _2, x, y);
adder.join();
cout << sum;
그리고 당신이 정말로 add
기능을 사용하려면, 당신은 bind
을 사용하십시오 :
using namespace boost::lambda;
using boost::thread;
int add(int a, int b) {return a+b;}
int sum, x=2, y=6;
thread adder(var(sum) = bind(add, _1, _2), x, y);
adder.join();
cout << sum;
그리고 함수 호출, 사용'의 호출을 지연 바인딩. – GManNickG
필자는 확실히이 함수를 사용할 필요가 있습니다. 'add'예제는 총체적 단순화입니다. :) 그러나 스레드에 대한 구문을 시도 :'스레드 합계 (var (sum) = bind (add, _1, _2), x, y); ' MSVC 9 (boost 1.43)에서 오류가 발생합니다. '내부 (INT, INT)을': '부스트/λ/세부/function_adaptors.hpp (260) : 오류 C2664 맞게 트림 [ 결과'내부 '에'RT2 ' 에서 파라미터 2를 변환 할 수있다 = INT, Func을 = INT (INT, INT) RET = INT, A2 = RT1, A3 = RT2, 이며 Arg1 = INT, ARG2 = INT, A1 = RT1, I = 2 ]' –
Nevermind. 나는'boost :: lambda :: _ 1;'등을 사용하는 것을 잊어 버렸습니다. 왜 나는 더 많은 오류를 드러내지 않는지 궁금합니다. 나는 어느 범위에서 _1/_2 인지도 모르겠다! 나는 boost 또는 std를 위해 네임 스페이스를 사용하지 않는다. –