2

私が得るエラーは、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"; } ) );

ただし、fill_n行をに変更すると

for( int i = 0; i < 10; ++i )
{
  workers.push_back( std::thread( []{ std::cout << "thread\n"; } ) );
}

それはうまくいきます。これらは、以前に似たようなコードで変更を加えたのと本質的に同じだと思いました。

4

1 に答える 1

7

ライン上

std::fill_n( std::back_inserter( workers ), 10, std::thread( []{ std::cout << "thread\n"; } ) );

作成された一時std::threadインスタンスが1つありfill_n、それを10個コピーして埋めようとしworkersます。オブジェクトを移動して多数のコピーを作成することはできません。意味がありません。

あなたが欲しいのはおそらくstd::generate_n

std::generate_n(std::back_inserter(workers), 10, [] {
    return std::thread([] { std::cout << "thread\n"; });
});
于 2011-09-03T15:35:55.443 に答える