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

时间:2015-05-19 11:32:05

标签: c++11 future pimpl-idiom

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

我可以使用这种技术来解决我的问题吗? 如果是这样,在结构中分配未来的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

来自this documentation,它说的是 未来的复制构造函数被禁用。

我建议您使用右值引用并将其移入内部类。

struct intern
{
    intern(std::future<bool>&& ini)
    : _i(std::move(ini))
    {  }
    std::future<bool> i;
};

我还没有尝试编译它,但它应该有效。