<streambuf>
VS2010のヘッダーファイルを見ると、このメンバー関数の定義が次のようになっていることがわかります。
pos_type pubseekoff(off_type _Off, ios_base::seekdir _Way,
ios_base::openmode _Mode = ios_base::in | ios_base::out)
{ // change position by _Off, according to _Way, _Mode
return (seekoff(_Off, _Way, _Mode));
}
ここseekoff
で、は仮想関数です。これは派生クラスでオーバーライドされ、basic_filebuf
以下に示すようbasic_stringbuf
に基本クラスでは何も実行しません。basic_streambuf
virtual pos_type seekoff(off_type, ios_base::seekdir,
ios_base::openmode = ios_base::in | ios_base::out)
{ // change position by offset, according to way and mode
return (streampos(_BADOFF));
}
の定義が見つかりませんでし_BADOFF
たが、おそらく-1
です。しかし、それはここでは本当に重要ではありません。クラスは抽象クラスであるため(そのコンストラクターは保護されているため) 、この関数もpubseekoff
呼び出されることもありません。basic_streambuf
gcc
コンパイラが同じ手法を使用していることにも注意してください。なぜ2つのコンパイラは、純粋な仮想として宣言し、派生クラスのそれぞれでそれを定義するのでseekoff()
はなく、メンバー関数に頼らなければならなかったのですか?pubseekoff
basic_streambuf
basic_filebuf
basic_stringbuf