我试图在CLR dll包装的c++ dll中使用std::future
所以在我的头文件在我的c++ dll我有以下内容:
#include <future>
std::vector<std::future<bool>> m_futureVector;
但是当我构建时,我得到错误:
错误C1189: #error:在编译/clr或/clr:pure时不支持。
所以我一直试图通过使用这个链接中描述的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;
};
我可以用这个技巧来解决我的问题吗?如果是这样,在结构中分配未来的正确方法是什么?
从这个文档中,它说future的复制构造函数被禁用。
我建议你取一个右值引用,并把它移到内部类中。
struct intern
{
intern(std::future<bool>&& ini)
: _i(std::move(ini))
{ }
std::future<bool> i;
};
我没有尝试编译它,但它应该可以工作。