gpt4 book ai didi

c++ - 为什么在包含 std::promise 作为成员时结构的 make_unique 会失败?

转载 作者:行者123 更新时间:2023-11-28 01:55:58 29 4
gpt4 key购买 nike

我编写了结构体 MyParam 以便它可以使用任意数量的参数进行实例化,在本例中是一个 int 和一个 bool .出于封装的原因,我希望 MyParams 包含它自己的 promise 以便它可以在完成某些操作时报告。但是当我将语句添加到结构时,它失败了。不过,作为一个全局性的,它运作良好。这是代码:

#include <tuple>
#include <memory>
#include <future>

//std::promise< bool > donePromise; // OK: if at global level, then make_unique error goes away

template< typename... ArgsT >
struct MyParams
{
MyParams( ArgsT... args ) : rvalRefs { std::forward_as_tuple( args... ) } {}

std::tuple< ArgsT... > rvalRefs;
std::promise< bool > donePromise; // causes make_unique to fail when donePromise is a member of MyParams
};

int main()
{
int num { 33 };
bool tf { false };
MyParams< int, bool > myParams( num, tf ); // OK
auto myParamsUniquePtr = std::make_unique< MyParams< int, bool > >( myParams );

std::future< bool > doneFuture = myParams.donePromise.get_future(); // OK: when donePromise is a global

return 0;
}
error C2280: 'MyParams<int,bool>::MyParams(const MyParams<int,bool> &)': attempting to reference a deleted function

作为成员(member),关于 promise 声明,我缺少什么?

最佳答案

std::promise 不可复制构造。

std::make_unique< MyParams< int, bool > >( myParams )

以上,make_unique正在尝试复制构造一个 MyParams< int, bool >由于 promise 的存在,它的格式不正确数据成员。如果您改为移动构造,您可以获得要编译的代码。

std::make_unique< MyParams< int, bool > >( std::move(myParams) )

关于c++ - 为什么在包含 std::promise 作为成员时结构的 make_unique 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41187945/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com