書き込みマニピュレーターを引数なしで作成できます。
引数を使用するためのマニピュレーターは複雑なマクロのクラスの派生が使用は必要ではありません。プリンターがペアを必要とするとします。[<ESC> 太字モードにする場合は。このペアをストリームに直接挿入できます :
cout << "regular " << '\033' << '[' << "boldface" << endl;
または文字を挿入 bold のマニピュレーターを定義する :
ostream& bold( ostream& os ) {
return os << '\033' << '[';
}
cout << "regular " << bold << "boldface" << endl;
bold のグローバルに定義された関数は ostream の参照引数を受け取りostream の参照を返します。これはプライベート クラスの要素にアクセスする必要がないためメンバー関数またはフレンド メソッドではありません。bold の関数はストリームにこのようなことがわかります宣言を使用してその関数の型を受け取るためのストリームの << の演算子をオーバーロードするために接続します :
_Myt& operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
{
// call ios_base manipulator
(*_Pfn)(*(ios_base *)this);
return (*this);
}
他のオーバーロードされた演算子を拡張するにはこの機能を使用できます。このクラスは bold をストリームに文字を挿入すること付帯的です。関数は隣接する文字が印刷されたときのストリームに挿入すると必ずしも呼び出されます。したがっては出力ストリームのリング バッファーに低下する可能性があります。