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

转载于:https://my.oschina.net/wxwHome/blog/98034

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值