浅尝boost之format

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;

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nuxt 服务器构建因太耗CPU进程被杀解决办法

在本地打包然后上传到github 再下载到服务器 如果你项目中有.gitignore那把里面的.nuxt删了(.gitignore是设置GIT不上传的文件)并把dist改为/dist 然后用git或者sourcetree上传项目到github&#xff0c;我这里用的sourceTree 上传完成 到服务器把项目下载下来 我这用的linu…

实用的rpm网站

http://www.rpmfind.net和 http://rpm.pbone.net/转载于:https://blog.51cto.com/nickcoco/993222

在VisualStadio2015上使用EF6.0建立MySql数据库

1.新建工程 2.建立类的文件夹DAL 3.建立相关类 【Student类】 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ETTest3{ public class Student { public int Id { get; set; } public string La…

固定列表的表格

固定的行&#xff1a;行名称不一样&#xff0c;每一个值对应赋值 html&#xff1a; <el-table class"table-box" :data"allObj.peoArr"><el-table-column prop"name" min-width"130"></el-table-column><el-ta…

拼图算法分析...

From: http://blog.sina.com.cn/s/blog_6a4b57e30100mfch.html 一、题目说明&#xff1a;   &#xff08;九宫问题&#xff09;在一个&#xff13;&#xff13;的九宫中有&#xff11;&#xff0d;&#xff18;这&#xff18;个数及一个空格随机的摆放在其中的格子里&#…

uni-app小程序本地打包超过2M不能预览问题;小程序打包过大不能预览和真机调试;uni-app分包;

一、问题&#xff1a;我们在小程序工具中开发时候&#xff0c;需要本地打包&#xff0c;但是当本地的打包文件大于2M时候&#xff0c;预览的二维码就会有问题&#xff0c;导致真机扫码打不开或者有遗漏。 二、此时就需要开启分包 1.微信小程序每个分包的大小是2M&#xff0c;总…

MySQL从5.5升级到5.6,TIMESTAMP的变化

转载来自http://blog.csdn.net/ghsau。 MySQL从5.5升级到5.6&#xff0c;TIMESTAMP的变化 TIMESTAMP在MySQL5.5中的行为 第一个未设置默认值的TIMESTAMP NOT NULL字段隐式默认值&#xff1a; CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP后面未设置默认值的TIMESTAMP NOT …

Asp.Net MVC开源CMS - Orchard

最近在学习Asp.Net MVC, 一直是step by step地看官方文档。 想找个成熟的MVC开发的开源系统&#xff0c;系统学习一下MVC, 搜索了一下&#xff0c;惊喜的发现了Orchard. 这个是介绍 2011/01/21号发布的关于Orchard的介绍&#xff0c;说明Orchard还是一个非常新鲜的事物。以后会…

letsencrypt 免费https安装过程linux centos

curl https://get.acme.sh | sh ~/.acme.sh/ 再修改conf的配置 /home/nginx-1.12.1/conf 目录里的nginx.conf server {server_name www.demo.com;location / {rewrite root html/index/;}} 重启 nginx /home/nginx-1.12.1/sbin/nginx -s reload 运行 我用的是nginx…

拼图游戏及其相关算法

From: http://blog.sina.com.cn/s/blog_4ed8b87701011c6x.html 这个问题其实可以简单表述成&#xff0c;3*3的格子装了1至8&#xff0c;8个数字&#xff0c;数字是随机分布于各个格子中&#xff0c;问是否可以利用空格的格子&#xff0c;移动装有数字的格子最终达到某种序列&a…

在移位数组中查找数

题目描述&#xff1a; 一个数组是由一个递减数列左移若干位形成的&#xff0c;比如{4&#xff0c;3&#xff0c;2&#xff0c;1&#xff0c;6&#xff0c;5}是由{6&#xff0c;5&#xff0c;4&#xff0c;3&#xff0c;2&#xff0c;1}左移两位形成的&#xff0c;在这种数组中查…

小程序分享功能记录;小程序页面分享给好友携带参数

需求&#xff1a; 现有首页index和新增车辆页add-car。 正常操作流程是&#xff1a;从首页index点击按钮&#xff0c;会携带参数id跳转到新增车辆页add-car。 现在需求是用户A从首页index携带参数id跳转到新增车辆页add-car&#xff0c;在add-car页面点击分享按钮&#xff0c;将…

关于Application.Lock和Lock(obj)

1.Application.Lock和Application.UnLock一般配对出现&#xff0c;用于锁住Lock与UnLock之间的所有代码&#xff08;注意不光锁住对于Application的赋值&#xff09;。 2.Lock(obj) 于用锁住obj对象&#xff0c;obj对象必须是全局对象&#xff08;如&#xff1a;Application&am…

mysql事务处理

2019独角兽企业重金招聘Python工程师标准>>> ACID:Atomic、Consistent、Isolated、Durable 存储程序提供了一个绝佳的机制来定义、封装和管理事务。 1&#xff0c;MySQL的事务支持 MySQL的事务支持不是绑定在MySQL服务器本身&#xff0c;而是与存储引擎相关&#x…

记录一次uni-app页面跳转无效 来回跳转问题

问题&#xff1a;本身代码写的有问题导致的。从首页A跳转到新增页面B&#xff0c;在B页面点击保存后&#xff0c;再跳到首页A。此时在首页A&#xff0c;这时候无论点击跳转哪个页面&#xff0c;跳转成功后都会立即再跳回首页。 原因&#xff1a;B页面保存后&#xff0c;因为加了…

vue props 传值 触发事件方法

先父页传值 到子页用watch 监听show的值改变&#xff0c;触发方法 <dialog :showshowData v-on:listenhandData></dialog>data(){return:{showData:true} } methods:{handData(){....} } props:{show:Boolean} watch:{show:function(indexVal, oldVal){console.…

No1_6.字符串的基本操作2_Java学习笔记

1 import java.util.Scanner;2 import java.util.regex.Pattern;3 4 public class HelloString2 {5 6 public static void main(String[] args) {7 // TODO Auto-generated method stub8 /*******************9 *一、正则表达式&#xff1a;对输入…

IE6双倍边距

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;IE6双倍边距这个问题其实早在学习CSS之初都已经知道如何解决&#xff0c;但当时只知道如何解决而并不知道引起这个BUG的原因是什么&#xff0c;再接下来工 作过程中不断实践也终于明白是怎么回事了。但最…

centOs 7.2*64 ECS nginx安装教程

在服务器新建个文件夹放nginx下载包 mkdir ./nginx cd ./nginx 跳转到nginx文件下载 wget http://nginx.org/download/nginx-1.13.0.tar.gz 解压 tar -xvf ./(nginx的文件名) 进到解压文件&#xff0c;运行 ./configure --prefix/usr/local/nginx --with-http_ssl_module…