BOOST库之format

format库提供了一个把参数格式化到一个字符串格式的类,

就像printf所做的,但是有两个主要的不同:

  • format将参数发送给合适的stream,所以它是完全类型安全的并且自然地支持所有的用户自定义的类型。

  • format强类型转换中省略号不能被正确使用,需要不确定参数的函数被连续调用操作符%来替代。

  • 基本用法
  1. #include<iostream>
  2. #include<iomanip>
  3. #include<cassert>
  4. #include"boost/format.hpp"
  5.  
  6.  namespaceMyNS_ForOutput{
  7.  using std::cout;using std::cerr;
  8.  using std::string;
  9.  using std::endl;using std::flush;
  10.  using boost::format;
  11.  using boost::io::group;
  12. }
  13. namespaceMyNS_Manips{
  14.  using std::setfill;
  15.  using std::setw;
  16.  using std::hex;
  17.  using std::dec;
  18. }
  19. int main()  
  20. {  
  21. usingnamespaceMyNS_ForOutput;
  22.    usingnamespaceMyNS_Manips;
  23.     std::cout<< format("%|1$1| %|2$3|")%"Hello"%"world"<< std::endl;
  24. //Hello world
  25. //字符串格式化
  26. std::string s;
  27.     s= str( format(" %d %d ")%11%22);
  28. std::cout<< s<< std::endl;
  29. //其他进制格式化
  30.     cout<< format("%#x ")%20<< endl;
  31. //0x14
  32. cout<< format("%#o ")%20<< endl;
  33.    //024
  34. cout<< format("%#d ")%20<< endl;
  35.    //20
  36.  
  37. //异常
  38. // the format-string refers to ONE argument, twice. not 2 arguments.
  39.    // thus giving 2 arguments is an error
  40.    // Too much arguments will throw an exception when feeding the unwanted argument :
  41.    try{
  42.       format(" %1% %1% ")%101%102;
  43.     
  44.    }
  45.    catch(boost::io::too_many_args& exc){ 
  46.       cerr<<  exc.what()<< endl;
  47.    }
  48.     
  49.    // Too few arguments when requesting the result will also throw an exception :
  50. // even if %1$ and %2$ are not used, you should have given 3 arguments
  51.    try{
  52.       cerr<< format(" %|3$| ")%101; 
  53.    }
  54.    catch(boost::io::too_few_args& exc){ 
  55.       cerr<<  exc.what()<<"\n\t\t***Dont worry, that was planned\n";
  56.    }
  57.    return0;  
  58. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值