我试图在由CLR dll包装的C ++ dll中使用std :: future。
所以在我的C ++ dll的头文件中,我有以下内容:
#include <future>
std::vector<std::future<bool>> m_futureVector;
但是当我构建时,我得到了错误:
错误C1189:使用/ clr或/ clr:pure编译时不支持#error:
所以我一直试图通过使用此链接中描述的pimpl方法来解决这个问题:https://social.msdn.microsoft.com/Forums/vstudio/en-US/9771f61c-05b7-4e3e-96fb-ac9ea31ac3f4/c11-concurrency-thread-atomic-and-ccli
我已经完成了以下操作,但我无法正确分配未来:
标题文件:
struct intern;
std::vector<std::unique_ptr<intern>> m_futureVector;
cpp文件:
struct intern
{
intern(std::future<bool> ini)
{
//i = ini;//error - 'cannot be referenced - it is a deleted function'
i = std::async(ini); // error - no operator found which takes a rh operator of std::future
}
std::future<bool> i;
};
我可以使用这种技术来解决我的问题吗? 如果是这样,在结构中分配未来的正确方法是什么?
答案 0 :(得分:1)
来自this documentation,它说的是 未来的复制构造函数被禁用。
我建议您使用右值引用并将其移入内部类。
struct intern
{
intern(std::future<bool>&& ini)
: _i(std::move(ini))
{ }
std::future<bool> i;
};
我还没有尝试编译它,但它应该有效。