我编写了结构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
promise
关于作为会员的{{1}}声明,我缺少什么?
答案 0 :(得分:2)
std::promise
不是可复制构造的。
std::make_unique< MyParams< int, bool > >( myParams )
上面,make_unique
正在尝试复制由于MyParams< int, bool >
数据成员的存在而构造错误的promise
构造。如果移动构造,则可以获取要编译的代码。
std::make_unique< MyParams< int, bool > >( std::move(myParams) )