將std::future<Worldlet>
替換爲std::shared_future<Worldlet>
可能會解決您的即時編譯問題。
但問題的根源在於您可能只需要std::future
的一位消費者。您正在複製某個地方的struct
,這是要求將兩個future
s綁定到相同的源promise
(或任何來源)。
std::future
旨在向一位消費者提供一次數據。所以如果你想移動它,你必須move
它,而不是複製它。
作爲錯誤的猜測,您正在編譯MSVC2012。該編譯器缺少自動移動構造函數和賦值構造函數的創建。所以嘗試添加一個顯式的移動構造函數和move-assign方法。
struct LoadingWorldlet {
int x, z;
std::future<Worldlet> result;
LoadingWorldlet(LoadingWorldlet&& o):x(o.x),y(o.y),result(std::move(o.result)) {}
LoadingWorldlet& operator=(LoadingWorldlet&& o) {
x = o.x;
y = o.y;
result = std::move(o.result);
return *this;
}
};
然後,避免隱式複製你的LoadingWorldlet
。
這可能意味着你正試圖複製你的結構的一個實例。 '未來'不可複製,只是可移動複製。你能發佈一個重現錯誤的最小代碼示例嗎? – juanchopanza