0

書き込み先の複数のファイルを連続して開いたり閉じたりするのを避けるために、ofstream オブジェクトのベクトルを使用しようとしています。これまでのところ、私のコードは次のようになります。

std::vector<shared_ptr<ofstream>> filelist;

void main()
{
  for(int ii=0;ii<10;ii++)
  {
     string filename = "/dev/shm/table_"+int2string(ii)+".csv";
     filelist.push_back(make_shared<ofstream>(filename.c_str()));
  }

}

ofstream にはコピー コンストラクターがないため、ofstream ポインターのベクトルを使用しています。さらに、メモリリークに対してより堅牢であるはずの共有ポインターを使用しています。

上記は、ターゲットディレクトリに必要なファイルを正常に作成します。ファイルを閉じたい場合は、filelist[5]->close(); のようにできます。

私が確信していない唯一の部分は、これらの各ファイルに実際にどのように書き込むかです。通常、単一のファイルに対して、次のようなことを行います。

ofstream fout;
fout.open("myfile.txt");
fout<<"some text"<<endl;

この場合に使用したい << に相当するものは何ですか?

4

2 に答える 2

2

これを試して:

for (auto& stream : filelist)
{
    *stream << "some text" << std::endl;
}
于 2013-04-01T02:55:47.223 に答える
1

ostreamまたはのいずれかが必要ですostream&

filelist[i]この場合、基本的に と考えることがshared_ptr<ostream>できる ですostream*。これは、( operator*オーバーロードを介して) が*filelist[i]得られることを意味します。したがって、次のようなものを使用しますostream&*filelist[i] << "some text << std::endl;

于 2013-04-01T02:55:54.643 に答える