From: http://www.cnblogs.com/WuErPIng/archive/2005/04/21/142308.html

概述

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简单的工作方式

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

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

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

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

四、异常处理

一般写法:

 try 
 { 
 cout << boost::format("%d%d") % 1 << endl; 
 } 
 catch(std::exception const & e) 
 { 
 cout << e.what() << endl; 
 
 // 输出内容: 
 // boost::too_few_args: format-string refered to more arguments than were passed 
 } 

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

 // boost::io::all_error_bits selects all errors 
 // boost::io::too_many_args_bit selects errors due to passing too many arguments. 
 // boost::io::too_few_args_bit selects errors due to asking for the srting result before all arguments are passed 
 
 boost::format my_fmt(const std::string & f_string) 
 { 
 using namespace boost::io; 
 format fmter(f_string); 
 fmter.exceptions( all_error_bits ^ ( too_many_args_bit | too_few_args_bit ) ); 
 return fmter; 
 } 
 cout << my_fmt(" %1% %2% \n") % 1 % 2 % 3 % 4 % 5;

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

浅尝boost之format相关推荐

  1. 浅尝boost之timer

    我一直是在努力推介boost,因为boost是一块美玉,但,没有什么是完美的.现在,我将暴露出boost的一点瑕疵:boost::timer.虽说是瑕不掩瑜,但瑕疵就是瑕疵.先看一看下面的例子:  / ...

  2. 浅尝则止 - SciPy科学计算

    21. 浅尝则止 - SciPy科学计算 SciPy以NumPy为基础,提供了众多数学.科学.工程计算用的模块,包括但不限于:线性代数.常微分方程求解.信号处理.图像处理.稀疏矩阵处理. 本章适合那些 ...

  3. python 三维凸包_浅尝则止 - SciPy科学计算 in Python

    本文节选自作者的<Python编程基础及应用>视频教程.Python编程基础及应用_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com 21. 浅尝则止 ...

  4. 浅尝key-value数据库(三)——MongoDB的分布式

    浅尝key-value数据库(三)--MongoDB的分布式 测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式. MongoDB的分布式分成两种,一种是Replicat ...

  5. 论文浅尝 | 利用多语言 wordnet 上随机游走实现双语 embeddings

    论文笔记整理:谭亦鸣,东南大学博士生,研究方向为知识图谱问答. 来源:Knowledge Based System 链接:https://www.sciencedirect.com/science/a ...

  6. 论文浅尝 | 图神经网络综述:方法及应用

    论文链接:https://arxiv.org/pdf/1812.08434.pdf GNN相关论文列表链接:https://github.com/thunlp/GNNPapers 近日,清华刘知远老师 ...

  7. 论文浅尝 | 当知识图谱遇上零样本学习——零样本学习综述

    随着监督学习在机器学习领域取得的巨大发展,如何减少人工在样本方面的处理工作,以及如何使模型快速适应层出不穷的新样本,成为亟待解决的问题.零样本学习(Zero-Shot Learning, ZSL)的提 ...

  8. 论文浅尝 | 近期论文精选

    本文转载自公众号 PaperWeekly, 对我们近期的论文浅尝进行了精选整理并附上了相应的源码链接,感谢 PaperWeekly! TheWebConf 2018 ■ 链接 | https://ww ...

  9. 论文浅尝 | 从 6 篇顶会论文看「知识图谱」领域最新研究进展 | 解读 代码

    本文内容源自往期「论文浅尝」,由 PaperWeekly 精选并重新排版整理,感谢 PaperWeekly. ISWC 2018 ■ 链接 | http://www.paperweekly.site/ ...

最新文章

  1. 在SQL Server中保存和输出任意类型的文件
  2. 16个概念带你入门 Kubernetes
  3. python快速编程入门黑马-新手如何快速入门Python编程?/开发python入门教程
  4. 平面设计师如何训练自己创意思维
  5. Eclipse中弹出OLE Exception窗口
  6. Java-数据类型拓展
  7. Oracle修改实例名SID
  8. linux中如何批量修改文件名
  9. pymysql ︱mysql的基本操作与dbutils+PooledDB使用
  10. 如何做一个让开发人员看得起的软件测试人员
  11. 8位单片机003兼容替换意法半导体STM8S003F3P6
  12. fmincon函数求极值
  13. 英语常用单词分类---1
  14. 数据仓库建设规范(文档版)
  15. 【Day4.4】堵车去暹罗商圈吃午餐
  16. 对tuscany中domain、cloud、node、composite关系的理解
  17. linux第三方SDK库冲突,摄像机SDK对接第三方平台一SDK库问题FAQ
  18. jar文件打开方式和直接运行方法
  19. Mysql客户端连接服务端提示“Access denied for user ‘user_name‘@‘xxx.xxx.xx.xx‘ (using password: YES)”
  20. 服务器系统登录每次要输入密码,远程登录云服务器总是要输入密码

热门文章

  1. Foundationd和Application Kit的类层次
  2. Ubuntu 12.04 安装设置gcc4.4
  3. 关于Restful Web Service的一些理解
  4. File System Auditor 安装全程截图
  5. 计算机软件技术基础fifo算法,软件技术基础真题
  6. 673. 最长递增子序列的个数
  7. 审查指南 最新版本_代码审查-最终指南
  8. kotlin编写后台_在Kotlin编写图书馆的提示
  9. 系统在此应用程序堆栈溢出_从部署我的第一个完整堆栈Web应用程序中学到的经验教训...
  10. 真实感人故事_您的数据可以告诉您真实故事吗?