2009-05-21 22 views

答えて

9

IOstreamの詳細については、Standard C++ IOStreams and Localesを参照してください。それを読んだ後、私はあなたが現状で管理するのに満足すると思う - IOStreamsはおそらくC++標準ライブラリの最も複雑な部分です。

3

それは依存...

それは何らかの形で、オペレーティングシステムのネイティブIOシステムと対話します。カーネルへのシステムコールを使用するCライブラリを内部的に使用することも、システムコールを直接使用することもできます。正確な実装は、プラットフォームに大きく依存しています。

多くの人が車輪を再発明しないと言うでしょうが、それは良い学習体験になる可能性があります。 Windowsを使用している場合は、ファイル処理のためのWin32 API呼び出しを調べます。 Linuxを使用している場合は、POSIX/Cライブラリを使用するか、システムコールを使用します(はるかに難しく、Cライブラリを使うことをお勧めします)。

1

あなたは確かにホイールを再発明することができます。

国際的な文字セットを処理するために、ストリーム演算子には多くの問題があります。合理的に深くそれを見た後、私は本当にそれほど気にしなかった。これは非常に複雑で、継承を簡単に使用する可能性は完全に無くなります。それは動作し、しかし、利用可能です。 (コンバージョン時に使用するストレージの動作を変更したい)

1

すべてのストリームはstreambufに移動します。そのstreambufはストリームのタイプに依存します。 ofstreamはfstreambufに行きます。 coutは不特定のstreambufに行きます。あなたがものをカスタマイズしたい場合、coutはこのstreambufを取得し、おそらくそれを置き換えることを可能にします。

共通のパターンは、「フィルタリングstreambuf」です。これは、入力を別のstreambufに送信する前に変換するstreambufインターフェイスです。これはcoutと組み合わせることができます:元のstreambufを取り出し、それをフィルタリングstreambufでラップし、そのラッパーをcoutに戻します。オリジナルのstreambufの仕組みを知る必要はありません。

関連する問題