使用PIMPL在c++ dll中包含std::future



我试图在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;
};

我没有尝试编译它,但它应该可以工作。

最新更新