ios_base::register_callback
Gibt eine Rückruffunktion an.
void register_callback(
event_callback pfn,
int idx
);
Parameter
pfn
Zeiger auf die Rückruffunktion.idx
Eine benutzerdefinierte Zahl.
Hinweise
Die Memberfunktion drückt die Paare {pfn, idx} auf den gespeicherten Rückrufstapel Rückrufstapel.Wenn ein Rückrufereignis ev gemeldet wird, werden die Funktionen, in umgekehrter Reihenfolge aus der Registrierung, durch den Ausdruck (*****pfn)(ev, *this, idx) aufgerufen.
Beispiel
// ios_base_register_callback.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
using namespace std;
void callback1( ios_base::event e, ios_base& stream, int arg )
{
cout << "in callback1" << endl;
switch ( e )
{
case ios_base::erase_event:
cout << "an erase event" << endl;
break;
case ios_base::imbue_event:
cout << "an imbue event" << endl;
break;
case ios_base::copyfmt_event:
cout << "an copyfmt event" << endl;
break;
};
}
void callback2( ios_base::event e, ios_base& stream, int arg )
{
cout << "in callback2" << endl;
switch ( e )
{
case ios_base::erase_event:
cout << "an erase event" << endl;
break;
case ios_base::imbue_event:
cout << "an imbue event" << endl;
break;
case ios_base::copyfmt_event:
cout << "an copyfmt event" << endl;
break;
};
}
int main( )
{
// Make sure the imbue will not throw an exception
// assert( setlocale( LC_ALL, "german" )!=NULL );
cout.register_callback( callback1, 0 );
cin.register_callback( callback2, 0 );
try
{
// If no exception because the locale's not found,
// generate an imbue_event on callback1
cout.imbue(locale("german"));
}
catch(...)
{
cout << "exception" << endl;
}
// This will
// (1) erase_event on callback1
// (2) copyfmt_event on callback2
cout.copyfmt(cin);
// We get two erase events from callback2 at the end because
// both cin and cout have callback2 registered when cin and cout
// are destroyed at the end of program.
}
Anforderungen
Header: <ios>
Namespace: std