C/C++的格式化输出(4)--boost::for…

boost::format里的指示符语法大致有四大类:

继承并强化自printf的格式化字符串
    形式为: [ N$ ] [ flags ] [ width ] [ . precision ] type-char
    N$可选,指定使用第N个参数(注意,要么所有指示符都加此参数,要么都不加)
    接下来的参数可以参数printf的指示符,只是format为其中的flags添加了'_'和'='标志,用于指出内部对齐和居中对齐。
设置打印规则,它是printf参数的一个补充,只是为了更直观点。
    形式为: %|spec|
    如:%|1$+5|表示显示第一个参数,显示正负号,宽度为5
简单的位置标记
    形式为: %N%
    简单地声明显示第N个参数,优点是比较直观而且不用指定类型。
boost::format新的格式说明符 
  
 %{nt} 
 当n是正数时,插入n个绝对制表符 
 cout << boost::format("[t]")  << endl; 
 %{nTX} 
 使用X做为填充字符代替当前流的填充字符(一般缺省是一个空格) 
 cout << boost::format("[T*]")  << endl; 

浅尝BOOST之FORMAT

 

概述 

     std::string是个很不错的东东,但实际使用时基本在每个程序里都会遇到不愉快的事情:格式化字符串。我甚至由于这个原因在代码里引入平台有关的MFC,ATL等本来不需要在项目中使用的一些重量级的框架,就为了能轻松的做格式化字符串 :-) 。曾尝试过将ATL::CString的format函数提取出来使用,但ATL::CString的底层调用了windows独有函数,无法跨越平台。当然,现在有了boost::format,我们不用再担心了。boost::format重载了'%'操作符,通过多次调用'%'操作符就能将参数非常方便格式化成字符串,并实现了ATL::CString和C#中的string两者的格式化字符串功能。除了语法刚开始感觉到怪异,功能足以让人感觉到兴奋! 

 

 

一、boost::format工作的方式 
  
 基本的语法,boost::format( format-string ) % arg1 % arg2 % ... % argN 
  
 下面的例子说明boost::format简单的工作方式  
   
 

C/C++的格式化输出(4)--boost::format //  方式一 
C/C++的格式化输出(4)--boost::format
  cout  <<  boost::format("%s")  "输出内容"  <<  endl; 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format  //  方式二 
C/C++的格式化输出(4)--boost::format
  std:: string  s; 
C/C++的格式化输出(4)--boost::format  str( boost::format("%s")  "输出内容"  ); 
C/C++的格式化输出(4)--boost::format  cout  <<  <<  endl; 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format  //  方式三 
C/C++的格式化输出(4)--boost::format
  boost::format formater("%s"); 
C/C++的格式化输出(4)--boost::format  formater  "输出内容"; 
C/C++的格式化输出(4)--boost::format  std:: string  formater.str(); 
C/C++的格式化输出(4)--boost::format  cout  <<  <<  endl; 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format  //  方式四 
C/C++的格式化输出(4)--boost::format
  cout  <<  boost::format("%1%")  boost::io::group(hex, showbase,  40)  <<  endl; 
C/C++的格式化输出(4)--boost::format


二、boost::format实际使用的实例 
  
 格式化语法: [ N$ ] [ flags ] [ width ] [ . precision ] type-char  
   
 

C/C++的格式化输出(4)--boost::format //  ATL::CString风格 
C/C++的格式化输出(4)--boost::format
  cout  <<  boost::format("\n\n%s" 
C/C++的格式化输出(4)--boost::format  "%1t 十进制 = [%d]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 格式化的十进制 = []]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 格式化十进制,前补'0' = [d]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 十六进制 = [%x]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 八进制 = [%o]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 浮点 = [%f]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 格式化的浮点 = [%3.3f]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 科学计数 = [%e]\n" 
C/C++的格式化输出(4)--boost::format  "example :\n"  15  15  15  15  15  15.01  15.01  15.01  <<  endl; 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format  //  C#::string风格 
C/C++的格式化输出(4)--boost::format
  cout  <<  boost::format("%1%" 
C/C++的格式化输出(4)--boost::format  "%1t 十进制 = [%2$d]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 格式化的十进制 = [%2$5d]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 格式化十进制,前补'0' = [%2$05d]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 十六进制 = [%2$x]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 八进制 = [%2$o]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 浮点 = [%3$f]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 格式化的浮点 = [%3$3.3f]\n" 
C/C++的格式化输出(4)--boost::format  "%1t 科学计数 = [%3$e]\n" 
C/C++的格式化输出(4)--boost::format  "example :\n"  15  15.01  <<  endl; 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format输出结果 
C/C++的格式化输出(4)--boost::format  
C/C++的格式化输出(4)--boost::format


三、boost::format新的格式说明符 
  
 %{nt} 
 当n是正数时,插入n个绝对制表符 
 cout << boost::format("[t]")  << endl; 
  
 %{nTX} 
 使用X做为填充字符代替当前流的填充字符(一般缺省是一个空格) 
 cout << boost::format("[T*]")  << endl;  

四、异常处理 

 一般写法: 

C/C++的格式化输出(4)--boost::format  try 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format cout << boost::format("%d%d") << endl; 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format  catch(std::exception  const  e) 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format cout << e.what() << endl; 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format // 输出内容: 
C/C++的格式化输出(4)--boost::format 
// boost::too_few_args: format-string refered to more arguments than were passed 
C/C++的格式化输出(4)--boost::format
 
C/C++的格式化输出(4)--boost::format


 boost::format的文档中有选择处理异常的办法,不过个人感觉实用性可能不强,下面是文档中的例子  
  

C/C++的格式化输出(4)--boost::format  //  boost::io::all_error_bits selects all errors 
C/C++的格式化输出(4)--boost::format 
//  boost::io::too_many_args_bit selects errors due to passing too many arguments. 
C/C++的格式化输出(4)--boost::format 
//  boost::io::too_few_args_bit selects errors due to asking for the srting result before all arguments are passed 
C/C++的格式化输出(4)--boost::format
 
C/C++的格式化输出(4)--boost::format  boost::format my_fmt( const  std:: string  f_string) 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format using namespace boost::io; 
C/C++的格式化输出(4)--boost::format format fmter(f_string); 
C/C++的格式化输出(4)--boost::format fmter.exceptions( all_error_bits ( too_many_args_bit too_few_args_bit ) ); 
C/C++的格式化输出(4)--boost::format return fmter; 
C/C++的格式化输出(4)--boost::format 
C/C++的格式化输出(4)--boost::format  cout  <<  my_fmt("  %1% %2% \n")  5;

 

  
五、还有其它一些功能,但暂时感觉派不上用处,就不去深究了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengyoufengyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值