尝试编译此结构时出现错误 C2248:
struct LoadingWorldlet {
int x, z;
std::future<Worldlet> result;
};
我试图将结果作为参考,但随后出现错误 C2512。当我修复该错误时,我会在 xutility 中获得 C2582。有什么方法可以修复第一个错误而不得到第二个错误,或者有什么方法可以同时修复后两个错误?
替换std::future<Worldlet>
为std::shared_future<Worldlet>
可能会解决您立即的编译问题。
但问题的根源在于,您可能只想要std::future
. 您正在复制struct
某处,这要求将两个future
s 绑定到同一个源promise
(或任何源)。
std::future
旨在将其数据一次性交付给一位消费者。因此,如果你想移动它,你必须移动move
它,而不是复制它。
根据您的错误猜测,您正在 MSVC2012 中进行编译。此编译器缺少自动移动构造函数和赋值构造函数创建。所以尝试添加一个显式的移动构造函数和移动分配方法。
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
.