将打包的任务推送到容器中导致 VS2013 中出现 C2280 错误
pushing packaged task into container causes C2280 error in VS2013
我想使用 packaged_tasks 将任务添加到容器中。我创建了一个任务,将其绑定到一个数字并尝试将其推送到我的双端队列中。我在 push_back 上收到编译器错误 C2280 (VS2013)。这是代码:
void DoTask( int i )
{
std::cout << "int value: " << i << std::endl;
}
std::deque< std::packaged_task< void() > > task_q;
int _tmain(int argc, _TCHAR* argv[])
{
std::packaged_task< void() > t( std::bind( DoTask, 3 ) );
task_q.push_back( t ); // <-- C2280 error
return 0;
}
我从名为“C++ 线程 #9:packaged_task”的 YouTube Bo Qian 讲座中获得了这个示例代码。
这是一些错误代码文本:
error C2280:
'std::packaged_task<void (void)>::packaged_task(const std::packaged_task<void (void)> &)' : attempting to reference a deleted function... see declaration of 'std::packaged_task<void (void)>::packaged_task'...while compiling class template member function 'void std::allocator<_Ty>::construct(_Ty *,const _Ty &)'
1> with
1> [
1> _Ty=std::packaged_task<void (void)>"
这里是两次更正后的代码(移动任务和非空 return 值):
int DoTask( int i ) // non-void return value
{
return i;
}
std::deque< std::packaged_task< int() > > task_q; // bind eliminates need for arg (Bo Qian lecture)
int _tmain( int argc, _TCHAR* argv[] )
{
std::packaged_task< int() > t( std::bind( DoTask, 3 ) ); // bind eliminates need for arg
task_q.push_back( std::move( t ) ); // <-- move not copy
return 0;
}
packaged_task
的复制构造函数被删除。使用:
task_q.push_back( std::move(t) );
我想使用 packaged_tasks 将任务添加到容器中。我创建了一个任务,将其绑定到一个数字并尝试将其推送到我的双端队列中。我在 push_back 上收到编译器错误 C2280 (VS2013)。这是代码:
void DoTask( int i )
{
std::cout << "int value: " << i << std::endl;
}
std::deque< std::packaged_task< void() > > task_q;
int _tmain(int argc, _TCHAR* argv[])
{
std::packaged_task< void() > t( std::bind( DoTask, 3 ) );
task_q.push_back( t ); // <-- C2280 error
return 0;
}
我从名为“C++ 线程 #9:packaged_task”的 YouTube Bo Qian 讲座中获得了这个示例代码。 这是一些错误代码文本:
error C2280:
'std::packaged_task<void (void)>::packaged_task(const std::packaged_task<void (void)> &)' : attempting to reference a deleted function... see declaration of 'std::packaged_task<void (void)>::packaged_task'...while compiling class template member function 'void std::allocator<_Ty>::construct(_Ty *,const _Ty &)'
1> with
1> [
1> _Ty=std::packaged_task<void (void)>"
这里是两次更正后的代码(移动任务和非空 return 值):
int DoTask( int i ) // non-void return value
{
return i;
}
std::deque< std::packaged_task< int() > > task_q; // bind eliminates need for arg (Bo Qian lecture)
int _tmain( int argc, _TCHAR* argv[] )
{
std::packaged_task< int() > t( std::bind( DoTask, 3 ) ); // bind eliminates need for arg
task_q.push_back( std::move( t ) ); // <-- move not copy
return 0;
}
packaged_task
的复制构造函数被删除。使用:
task_q.push_back( std::move(t) );