class MoveOnlyOperation
{
public:
MoveOnlyOperation() = default;
MoveOnlyOperation(const MoveOnlyOperation&) = delete;
MoveOnlyOperation(MoveOnlyOperation&&) = default;
int operator()()
{
return 0;
}
};
我想将一个对象实例包装在 packaged_task 中,像这样:
std::packaged_task<void()> task(MoveOnlyOperation{});
我收到了“error C2280: 'MoveOnlyOperation::MoveOnlyOperation(const MoveOnlyOperation &)': attempting to reference a deleted function”错误信息
C++ 11的文档表示可以通过打包任务来完美转发实例。我在clang上也没有问题。
这里有一些关于如何实现打包任务的实现定义或者是VS 2015中的一个bug(可能后续版本也会出现同样的问题,因为我在http://rextester.com/WBEH22233上遇到了相同的问题)。
std::function
中,这就要求它必须是可复制的。我没有看到标准中有任何规定可调用对象需要是可复制构造的。 - Praetorian