浅尝boost之format

转载 2006年05月23日 19:50:00

一、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;

 

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

相关文章推荐

Java 窗体对象浅尝

  • 2009年09月28日 09:46
  • 72KB
  • 下载

浅尝Unity 3D的Asset Bundle知识(六)-----缓存利用进阶篇

经过了缓存利用相关的理解,小生对于Unity的Asset Bundle的研究也将更加深入。今天就让我们进入关于缓存使用...

高焕堂视频学习笔记:浅尝架构师的滋味

说明: 2015年的时候看了一段时间的高焕堂从Android程序员到架构师视频,总共接近234集的内容,15年大概看了60集左右,后来因为其他的事情,这个事就暂停了,最近找出笔记,发现需要整理...
  • a910626
  • a910626
  • 2016年12月01日 15:40
  • 392

浅尝Solr~~

由于最近项目组有需求,大致意思是做一个对数据全面的统一搜索。于是乎,就研究了一哈Solr什么是Solr?Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用...

浅尝数据库并发控制

数据库是一个共享资源,可以供多个用户使用。然而,对于大多数程序员来说,单处理机系统是我们接触最多的系统,运行在其上的数据库事务也并非真正意义上的并行,实际上它是这些并行事务的并行操作轮流交叉运行,这种...

Selenium3 浅尝

1.下载网址:http://www.seleniumhq.org/download/ 根据自己的语言,下载正确的版本,由于本人是java出身,python还只是入门级别,所以不班门弄斧,下面的所有di...

浅尝KMP算法

转自:http://blog.163.com/kazenoyume@126/blog/static/166753923201462783123487/ 最近在工作之余,参加了hihocode...
  • ltx06
  • ltx06
  • 2015年11月05日 19:10
  • 297

浅尝Python 的GUI

【背景介绍】 编写python接口测试脚本后,希望该脚本提供给他人使用时,能够简单易用,便想创建一个界面,在界面上选择测试地址和测试用例进行接口调用。设计出的最终界面如下,界面较简陋~处女作,勿喷~...

不能实例化抽象类的浅尝

今天写代码,想实现个功能,写成一个界面类,做成了CView的子类,编译无法通过,说是不能实例化抽象类,由于CView::OnDraw是抽象的。这个问题我是第一次遇到,于是网上搜了一下都不能得到满意的答...

机器学习初识之Kmeans浅尝

机器学习在图像识别方面具有很好的效果,今天在网易云课堂黑板可老师视频中学习了一下Kmeans算法,是一种非监督类学习算法,具体步骤如下   1,选取K个点作为初始中心 2,将每个点最近的中心,形...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅尝boost之format
举报原因:
原因补充:

(最多只允许输入30个字)