我在使用 boost::async()
(Boost 1.56, Windows: VS2010 和 VS2012) 时得到了意外的结果。
#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
由于某种原因,boostFut
被推断为 boost::unique_future<void>
而不是 boost::unique_future<int>
。
我做错了什么?
注意:在 VS2012 上,如果我使用 std::async(func)
而不是 boost::async(func)
,那么它会按预期工作,并且 future 的类型被推断为 int
。
boost
的版本是有用的。另外,有时候 boost 函数需要在传入的函数对象中使用result_type
类型定义。 - Yakk - Adam Nevraumontresult_type
建议吗?即使我明确定义了boost::unique_future<int> boostFut = ...
,问题仍然存在,此时asyn()
分配无法编译。 - Adi Shavitstruct foo { typedef int result_type; int operator()() const { return 42; };
? 或者没有result_type
的foo
? - Yakk - Adam Nevraumont#define BOOST_RESULT_OF_USE_DECLTYPE
。 - Piotr Skotnicki