[[Hirofumi Fujii Start Page]]

* gnuplot の iostream 化 [#z45e6c91]
C++ 入門の題材 search その何番目かわからなくなったが、、

徒然なるままに、
ひぐらし画面に向かいて、、

というわけで(どういうわけだ?)、一つの案として
- 入門 program として乱数発生(rand() を使う)。これは生データの
代わり。将来シミュレーションにも使える。
- 乱数発生を関数化、関数と namespace の導入
- 乱数分布を調べるのに(1次元) histogram を struct で導入、
メモリの動的確保と pointer の導入
- histogram の class 化、copy constructor 、代入演算子の重要性
- histogram class の出力演算子の作成。この時、gnuplot の ostream class 化が
成されていると、とても美しいような気がする、、

で、gnuplot の iostream 化(というかとりあえず ostream 化)
- gnuplot の起動と制御は popen() で行う。
- popen() に該当する pstream class の標準があれば、それを使おうかと思った
のだが、どうも無さそう(boost にはあるかも、でも boost を導入するほどのもの
ではないだろう)。
- gnuplot に特化するなら、streambuf と ostream から派生させる方が楽そう。
constructor でいきなり popen してもよいだろうし。
-- streambuf から gplbuf を派生。
-- gplbuf には open()/close() を持たせ、ここで popen()/pclose()。
-- ogplstream(ognuplot という名前の方がいいかな?)は gplbuf 使って、
通常の ostream の作成法で作る。

何となく簡単にいけそうな気がしてきた。後でやってみよう。

** 結果 [#lb4d8555]
何となくできた。しかし、デバッグも含め 3時間もかかってしまった。疲れたので
source 載せるのやめ(急ぎの希望者は藤井宛電子メールでも、、Hirofumi.Fujii
に @kek.jp をつける)。
source 載せるのやめ(急ぎの希望者は藤井宛電子メールで、、Hirofumi.Fujii
に @kek.jp をつける。でも居るのか?)。

まあ、結構おもしろいかも。

 mylibrary::ognuplot gpl("gnuplot");
   :
 gpl << "plot sin(x)" << std::endl;

なんてやると絵が出る。

- class名は ognuplot にした。
- std::ostream から派生。従って、出力規則も std::ostream のルールだし
例外制御も std::ostream のルール。
- 上記例のように実行ファイル名を与えて construct すると、その時点で popen() 接続。
- 引数無しの constructor で生成した時は、後で open() 関数を呼び出すことで popen() 接続。
- close() は用意してあるが、特に呼び出さなくても destruct された時点で open されていれば自動で close()。



トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS