我必须使用gcc 4.8.3 w / o C ++ 11。如果没有C ++ 11,则提升1.56 Ext.isIE ? pdfAsDataUri = me.convertDataURIToBinary(pdfAsDataUri): '';
convertDataURIToBinary: function(dataURI) {
var BASE64_MARKER = ';base64,',
base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length,
base64 = dataURI.substring(base64Index),
raw = window.atob(base64),
rawLength = raw.length,
array = new Uint8Array(new ArrayBuffer(rawLength));
for (var i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
}
return array;
},
和async
的工作方式会有所不同。我猜future
默认返回boost::async
。 W / C ++ 11,boost::unique_future
可以移动到unique_future
。所以我可以做到
shared_future
W / o C ++ 11,我们需要用什么宏来制作相同的代码?我想我们需要明确地调用boost'move'?否则,返回的未来不能“投放”到共享的未来。
#include <boost/thread.hpp>
#include <boost/thread/future.hpp>
void do() {}
boost::shared_future<void> f = boost::async(do);
std::vector<boost::shared_future<void>> fs;
fs.push_back(f);
但我不确定如何'移动'到#define BOOST_THREAD_USES_MOVE
#include <boost/thread.hpp>
#include <boost/thread/future.hpp>
boost::unique_future<void> f = boost::async(boost::launch::any, do);
。我们需要更多的宏才能使其发挥作用吗?
谢谢,
答案 0 :(得分:2)
您可以使用share()
成员函数明确地分享未来(不确定何时添加,但它肯定在Boost.Thread 1.56中):
boost::shared_future<void> f = boost::async(do).share();
共享期货是可复制的,因此您不需要使用移动语义。如果您决定在C ++ 03下使用移动语义,则必须use Boost.Move-aware containers,即用std::vector
替换boost::container::vector
:
boost::unique_future<void> f = boost::async(do);
boost::container::vector<boost::unique_future<void>> fs;
fs.push_back(boost::move(f));