今更ですが、C++11からはfstreamやstringstreamを関数の戻り値にできるようになりました。

#include <iostream>
#include <fstream>
 
std::ifstream open_config_file()
{
  std::ifstream s("app.conf");
  s.exceptions(std::ios_base::badbit | std::ios_base::failbit);
  // return std::move(s);でも可
  return s;
}
 
int main()
{
  auto f = open_config_file();
  // ここでfから読み込む処理。
}

例はifstreamですが、もちろんofstreamでも可能です。ムーブコンストラクタ・ムーブ代入演算子そしてswapメンバ関数が追加されています。

2015年3月22日修正:ソースコードからmove関数を外し、コメントに移動しました。

スポンサード リンク

この記事のカテゴリ

  • ⇒ fstreamを返す関数