c++ ios_base register_callback方法使用

c++中不常用的东西。

// 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. 
} 

你可能感兴趣的:(c++ ios_base register_callback方法使用)