## 16.2 例

プログラムでは、次のような特定のストリームにコールバック関数を登録することができます。

>     // コールバック関数
>     void show_event(ios_base::event e, iosbase& io, int index)
>     {
>       if (e == ios_base::imbue_event)
>         cout << "imbue called" << endl;
>       else if (e == ios_base::erase_event)
>         cout << "stream destroyed" << endl;
>       else
>         cout << "cpyfmt called" << endl;
>     }

>     ostringstream s;
>     s.register_callback(show_event,0);    //1
>     s.imbue(locale::global());            //2

//1 | ストリームの削除、新しいロケールの組み込み、 `cpyfmt` の呼び出しによるコールバックの起動のいずれかが実行されると、`ios_base::erase_event`、`ios_base::imbue_event`、または `ios_base::copyfmt_event` を最初の引数として、関数 `show_event` が呼び出されます。
//2 | これによって、`show_event` が呼び出されます。最初の引数は、`ios_base::imbue_event`; です。2 番目の引数は、イベントの発生したストリームに対する参照で、この例では `s` です。3 番目の引数は、常に `register_callback` の呼び出しに対するインデックスで、この例では `0` です。 複数の関数を登録すると、登録とは逆の順序で呼び出されます。

ユーザー定義ストリームの、挿入子におけるコールバック関数の使用方法についての詳細な例は、5.9.2 節を参照してください。

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。

OEM リリース, 1998 年 6 月