bpw*_*621 2 multithreading stl-algorithm c++11
我得到的错误说fill_n下面的行试图使用已删除的复制构造函数:为什么它不尝试使用移动构造函数?我尝试将它包装在一个std::move但没有帮助.
std::vector< std::thread > workers;
workers.reserve( 10 );
std::fill_n( std::back_inserter( workers ), 10, std::thread( []{ std::cout << "thread\n"; } ) );
Run Code Online (Sandbox Code Playgroud)
但是,如果我将fill_n行更改为
for( int i = 0; i < 10; ++i )
{
workers.push_back( std::thread( []{ std::cout << "thread\n"; } ) );
}
Run Code Online (Sandbox Code Playgroud)
工作正常.我认为这些基本上与我之前从一个到另一个的变化相同,之前有些相似的代码.
在线上
std::fill_n( std::back_inserter( workers ), 10, std::thread( []{ std::cout << "thread\n"; } ) );
Run Code Online (Sandbox Code Playgroud)
std::thread创建了一个临时实例,并fill_n尝试生成10个副本以进行填充workers.你不能移动一个对象来制作许多副本 - 它没有任何意义.
你想要的可能是std::generate_n:
std::generate_n(std::back_inserter(workers), 10, [] {
return std::thread([] { std::cout << "thread\n"; });
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |