C++ iostream 実装資料1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[C++のiostream]]
* streambuf として実装すべきものの考察 [#d3c389bc]
規格(JIS X 3014:2003)によると、
C++ の istream、ostream 及びそれらから派生している
iostream は streambuf object への pointer を引数とする
constructor を持つ。従って
基本的には iostream の各機能は streambuf の public member
のみで実現しているはずである。
そこで、まずは
規格から streambuf の public member を列挙してみる。
** constructor と destructor [#mc7b99fb]
- constructor は public ではない。すなわち、streambuf cla...
これを直接使うのではなく基底classとしてここから
派生させて使うことが想定されている。
- destructor は public であり
(当然ながら)virtual 宣言されている。
** locale [#w36e4565]
以下はlocale 関連での public memberである。
- publmbue
- getloc
これらは私の目的には関連しないと思われるので無視(default...
する。
** buffer管理、位置決め [#lacda682]
buffer管理、位置決め関連の public member は以下のものであ...
- pubsetbuf
- pubseekoff
- pubsetpos
- pubseekpos
- pubsync
今考えているのはstream型入出力なので、位置決め関連の動作は
ない。従って実装しない(default のまま)。
また pubsetbuf(setbufが呼ばれる)も私の目的には必須では
ないので当面実装しない(defaultのまま)。
従って、この機能のうち考えるべきは pubsync のみである。
** 読み込み領域 [#ze86ae11]
読み込み領域に関する public member は以下のものである。
- in_avail
- snextc
- sbumpc
- sgetc
- sgetn
これらはいわば読み込みの本体なので、別に考察する。
** 書き込み領域 [#m4f65f73]
書き込み領域に関する public member は以下のものである。
- sputc
- sputn
読み込み同様、書き込みの本体機能であるので、これも別に考...
** 書き戻し [#e656bf88]
以下のものが書き戻し用 public member である。
- sputbackc
- sungetc
この二つは前者が文字を指定して書き戻し、後者は読み出し位...
** このページのまとめ [#ia8f5718]
結局 streambuf の public member のうち、まず考察すべきは
- pubsync
- in_avail
- snextc
- sbumpc
- sgetc
- sgetn
- sputc
- sputn
- sputbackc
- sungetc
の10個である。次節([[C++ iostream 実装資料2]])
ではこれらについて考察しよう。
** 余談 [#tfeb27e9]
参考に g++ の fstream を覗いてみると、templateなので読み...
一応 char に限定して
- streambuf から filebuf を派生
- ifstream(istreamから派生)や ofstream(ostreamから派生)
や fstream(iostreamから派生)では、filebuf object をmemb...
して持つ
- いずれのconstructorもthis->init(filebuf&)を呼んでいる
- init()はistreamやostreamにはない。で、これらはiosから派...
- ios は ios_base から派生している。
iostreamはistreamとostreamから派生している。
一方、fstreamはiostreamから派生し、ifstreamやofstreamから...
いるわけではない。ifstreamがistreamから派生し、
ofstreamがostreamから派生しているために仮想関数を通じて
間接的に呼ばれる構造になっている。stringstreamもfstreamと...
である。
stringstreamを使うと、atoi()やatof()などのCの標準関数を使...
例えば
#include <iostream>
#include <sstream>
int main(int argc, char* argv[])
{
int n;
std::istringstream s(argv[1]);
s >> n;
:
などとするとatoi()の代わりになる。
終了行:
[[C++のiostream]]
* streambuf として実装すべきものの考察 [#d3c389bc]
規格(JIS X 3014:2003)によると、
C++ の istream、ostream 及びそれらから派生している
iostream は streambuf object への pointer を引数とする
constructor を持つ。従って
基本的には iostream の各機能は streambuf の public member
のみで実現しているはずである。
そこで、まずは
規格から streambuf の public member を列挙してみる。
** constructor と destructor [#mc7b99fb]
- constructor は public ではない。すなわち、streambuf cla...
これを直接使うのではなく基底classとしてここから
派生させて使うことが想定されている。
- destructor は public であり
(当然ながら)virtual 宣言されている。
** locale [#w36e4565]
以下はlocale 関連での public memberである。
- publmbue
- getloc
これらは私の目的には関連しないと思われるので無視(default...
する。
** buffer管理、位置決め [#lacda682]
buffer管理、位置決め関連の public member は以下のものであ...
- pubsetbuf
- pubseekoff
- pubsetpos
- pubseekpos
- pubsync
今考えているのはstream型入出力なので、位置決め関連の動作は
ない。従って実装しない(default のまま)。
また pubsetbuf(setbufが呼ばれる)も私の目的には必須では
ないので当面実装しない(defaultのまま)。
従って、この機能のうち考えるべきは pubsync のみである。
** 読み込み領域 [#ze86ae11]
読み込み領域に関する public member は以下のものである。
- in_avail
- snextc
- sbumpc
- sgetc
- sgetn
これらはいわば読み込みの本体なので、別に考察する。
** 書き込み領域 [#m4f65f73]
書き込み領域に関する public member は以下のものである。
- sputc
- sputn
読み込み同様、書き込みの本体機能であるので、これも別に考...
** 書き戻し [#e656bf88]
以下のものが書き戻し用 public member である。
- sputbackc
- sungetc
この二つは前者が文字を指定して書き戻し、後者は読み出し位...
** このページのまとめ [#ia8f5718]
結局 streambuf の public member のうち、まず考察すべきは
- pubsync
- in_avail
- snextc
- sbumpc
- sgetc
- sgetn
- sputc
- sputn
- sputbackc
- sungetc
の10個である。次節([[C++ iostream 実装資料2]])
ではこれらについて考察しよう。
** 余談 [#tfeb27e9]
参考に g++ の fstream を覗いてみると、templateなので読み...
一応 char に限定して
- streambuf から filebuf を派生
- ifstream(istreamから派生)や ofstream(ostreamから派生)
や fstream(iostreamから派生)では、filebuf object をmemb...
して持つ
- いずれのconstructorもthis->init(filebuf&)を呼んでいる
- init()はistreamやostreamにはない。で、これらはiosから派...
- ios は ios_base から派生している。
iostreamはistreamとostreamから派生している。
一方、fstreamはiostreamから派生し、ifstreamやofstreamから...
いるわけではない。ifstreamがistreamから派生し、
ofstreamがostreamから派生しているために仮想関数を通じて
間接的に呼ばれる構造になっている。stringstreamもfstreamと...
である。
stringstreamを使うと、atoi()やatof()などのCの標準関数を使...
例えば
#include <iostream>
#include <sstream>
int main(int argc, char* argv[])
{
int n;
std::istringstream s(argv[1]);
s >> n;
:
などとするとatoi()の代わりになる。
ページ名: