gcc 4.2.4 を使用しています。Schildt によると、「C++ The Complete Reference」、1995 年、ユーザー定義のパラメーター化されたマニピュレーターは次のように定義する必要があります。
istream &mymanip(istream &stream, type param)
{
// here my code
return stream;
}
// overload
imanip<type> mymanip(type param){
return imanip<type>(mymanip, param)
}
// usage
cin >> mymanip(param);
imanip(mymanip, param) は、mymanip と mymanip の引数を含むオブジェクトを返すことになっていると思います。これは、オーバーロードされた operator>> が mymanip を呼び出すために使用する必要があります。ただし、これは機能しません。imanip が宣言されていません。
このバージョンも見つけました:
IMANIP(int) fld(int n){
return IMANIP(int)(fld,n);
}
これも機能しません。
私の質問は次のとおりです。
- gcc 4.2.4 は、この詳細について ANSI C++ 標準に従っていますか? もしそうなら、この点に関して 1995 年以降、規格は変更されましたか?
- 独自のパラメータ化されたマニピュレータを定義するには、iostream コードを理解し、独自のオーバーロードされた imanip および operator>> 関数を記述する必要がありますか?
- 質問 2 への回答に関係なく、iostream コードを理解するための最善の戦略は何ですか? コードを読む必要がありますか?iostream の一部であるコンパイル済みライブラリの名前を調べるにはどうすればよいですか? 本を読むべきですか?