boost::async()
(부스트 1.56, Windows : VS2010 및 VS2012)에서 예기치 않은 결과가 나타납니다. 어떤 이유로 boostFut
를 들어 boost :: async()의 boost :: future <> 유형
#include <boost/thread/future.hpp>
...
auto func = [](){ return 123; };
auto boostFut = boost::async(func);
// boostFut = 42; // intentional error to reveal deduced type in compilation error
는
boost::unique_future<void>
대신
boost::unique_future<int>
으로 추론된다.
내가 뭘 잘못하고 있니?
참고 : VS2012에, 내가 대신 기대와 미래 유형이 int
으로 추론대로 작업을 수행 boost::async(func)
의 std::async(func)
를 사용합니다.
'boost'의 버전이 유용합니다. 아, 때로는 함수가 전달 된 함수 객체에서'result_type' typedef를 원합니다. – Yakk
위에서 설명한대로 : 부스트 1.56. 'result_type' 제안에 대해 자세히 설명해 주시겠습니까? 문제는 명시 적으로 다음을 정의하더라도 여전히 남아 있습니다 : boost :: unique_future boostFut = ...이 경우'asyn()'할당이 컴파일되지 않습니다. –
죄송합니다. 부스트 함수 어댑터 중 일부는 전달 된 객체에서 결과 유형을 명시해야하거나 적어도 문제를 해결할 수없는 경우에는 그 이상으로 떨어질 것을 요구합니다. 문제가 함수 포인터로 없어지나요? 'struct foo {typedef int result_type; int operator()() const {return 42; };'? 'result_type'이없는'foo'? – Yakk