浅尝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;

 

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

浅尝boost之format

From: http://www.cnblogs.com/WuErPIng/archive/2005/04/21/142308.html   概述       std::string是个...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2014年12月30日 15:15
  • 701

浅尝BOOST之FORMAT

浅尝BOOST之FORMAT 概述       std::string是个很不错的东东,但实际使用时基本在每个程序里都会遇到不愉快的事情:格式化字符串。我甚至由于这个原因在代码...
  • jiafu1115
  • jiafu1115
  • 2014年01月22日 13:02
  • 427

boost::format(字符串格式化库)

详细介绍boost::format
  • u013524455
  • u013524455
  • 2014年02月15日 16:22
  • 2361

用boost::format来格式化字符串

转: 用boost::format来格式化字符串 在字符串处理中少不了格式化字符串,C++中传统的格式化函数是C语言的sprintf,但它一个很大的问题就是不安全。因此,在stl中引...
  • liuhhaiffeng
  • liuhhaiffeng
  • 2016年10月28日 13:17
  • 971

浅尝boost之timer

我一直是在努力推介boost,因为boost是一块美玉,但,没有什么是完美的。现在,我将暴露出boost的一点瑕疵:boost::timer。虽说是瑕不掩瑜,但瑕疵就是瑕疵。先看一看下面的例子: ...
  • gong_xucheng
  • gong_xucheng
  • 2014年05月13日 08:20
  • 480

boost format字符串格式化

这个类是个小的实用类,提供更安全的格式化字符串操作。基本用法: boost::format fmt("aaa %1% bbb "); fmt % "haha"; 当然 它也支持一些...
  • fansongy
  • fansongy
  • 2013年05月15日 20:34
  • 7226

boost::format库的使用

库原型如下啊: namespace boost { template > class basic_format { public: typedef std::basic_string ...
  • chenzulong198867
  • chenzulong198867
  • 2012年12月16日 16:08
  • 3312

boost::format给std::string插上翅膀

#include #include #include #include int main() { std::string str1(" hello world1 "); boost::t...
  • liuhhaiffeng
  • liuhhaiffeng
  • 2016年12月14日 15:22
  • 713

浅尝BOOST之ANY

转自:http://www.cnblogs.com/wuerping/articles/116414.html any是个很短小的类, 代码加上空行和说明也就187行,但很有意思。它的主要作用是定义...
  • zhangxueyang1
  • zhangxueyang1
  • 2017年01月07日 21:36
  • 92

boost::format常用用法

p167 头文件 #include using namespace boost; 一个简单的例子 #include using namespace boost;int main() { c...
  • lijie0073237
  • lijie0073237
  • 2017年02月22日 16:01
  • 207
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅尝boost之format
举报原因:
原因补充:

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