void register_callback(event_callback fn, int index);
概要
コールバック関数を登録する。
要件
引数 fn
で指定された関数は例外を投げてはいけない。
効果
引数で指定された関数 fn
を、imbue()
、copyfmt()
、および、~ios_base()
が呼び出された際に引数の index
と共にコールバック関数として呼び出すよう登録する。
登録されたコールバック関数は、登録と逆の順序で呼び出される。
あるコールバック関数が呼び出されている中で登録されたコールバック関数は、次のイベントまで呼び出されない。
戻り値
なし
備考
引数 fn
と index
のペアが同じ組を 2 回以上登録した場合でも、特にマージ等は行われない(つまり、登録された回数だけ呼び出される)。
例
#include <iostream>
#include <sstream>
#include <locale>
void f(std::ios_base::event e, std::ios_base& str, int index)
{
switch (e) {
case std::ios_base::erase_event:
std::cout << "event = erase_event, ";
break;
case std::ios_base::copyfmt_event:
std::cout << "event = copyfmt_event, ";
break;
case std::ios_base::imbue_event:
std::cout << "event = imbue_event, ";
break;
}
std::cout << "index = " << index << '\n';
str.register_callback(f, (index + 1) % 3);
}
int main()
{
std::locale l;
std::stringstream ss;
ss.register_callback(f, 0);
std::cout << "imbue 1 start\n";
ss.imbue(l);
std::cout << "imbue 1 end\n";
std::cout << "imbue 2 start\n";
ss.imbue(l);
std::cout << "imbue 2 end\n";
std::cout << "imbue 3 start\n";
ss.imbue(l);
std::cout << "imbue 3 end\n";
}
出力
imbue 1 start
event = imbue_event, index = 0
imbue 1 end
imbue 2 start
event = imbue_event, index = 1
event = imbue_event, index = 0
imbue 2 end
imbue 3 start
event = imbue_event, index = 1
event = imbue_event, index = 2
event = imbue_event, index = 1
event = imbue_event, index = 0
imbue 3 end
event = erase_event, index = 1
event = erase_event, index = 2
event = erase_event, index = 0
event = erase_event, index = 2
event = erase_event, index = 1
event = erase_event, index = 2
event = erase_event, index = 1
event = erase_event, index = 0
バージョン
言語
- C++98
処理系
- Clang: 3.0 ✅, 3.1 ✅, 3.2 ✅, 3.3 ✅, 3.4 ✅, 3.5.0 ✅, 3.6.0 ✅, 3.7.0 ✅, 3.8.0 ✅
- GCC: 4.3.6 ✅, 4.4.7 ✅, 4.5.4 ✅, 4.6.4 ✅, 4.7.3 ✅, 4.8.1 ✅, 4.8.2 ✅, 4.9.0 ✅, 4.9.1 ✅, 4.9.2 ✅, 5.1.0 ✅, 5.2.0 ✅, 6.0.0 ✅
- ICC: ??
- Visual C++: ??