オブジェクトの1つをC++11
標準を使用して複数のスレッドに渡そうとしています。出力ストリームオブジェクトと他の引数を複数のスレッドに渡す
ofstream
オブジェクトを渡したいのは、すべてのスレッドが別の出力ファイルに書き込むようにしたいからです。
私はこのようにスレッドと出力ストリームを初期化しています:
std::thread execution_threads[NUMBER_OF_THREADS]; // creating multiple empty threads
std::ofstream output_files[NUMBER_OF_THREADS]; // Empty output streams
// Opening and initializing the output files
各スレッドは、2つの引数を取る関数実行:
void execution(int thread_id, std::ofstream& output_file)
をだから私は周りを見回していると私は」関数func
に複数の引数がある場合は、を使用する必要はなく、std::thread t(func, a,b,c,d);
と書くだけで渡すことができます。a,b,c,d
の場合は、C++11
を読んでください。だから私は、スレッドを起動するために、このループを書いた:
for (int i = 0; i < utils::NUMBER_OF_THREADS; i++) {
execution_threads[i] = std::thread(execution, i, output_files[i]);
}
事は、このコードは、このエラーでコンパイルできないということである。
Call to implicitly-deleted copy constructor of
'typename decay<basic_ofstream<char, char_traits<char> > &>::type'
(aka 'std::__1::basic_ofstream<char, std::__1::char_traits<char> >')
私はこの中で、入力としてstruct
を使用している場合ながら方法はすべて正常に動作します。
このようにして、すべてが正常に動作し、コンパイルされ、完全に動作します。しかし、私は実際には、コンパイラが、私が他のメソッドを使用する場合、私は削除されたコピーコンストラクタを使用しようとしていると私に伝えている理由を知りません。
ありがとうございました。