分享
 
 
 

boost 的 format 库

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

#include <iostream>

#include <iomanip>

#include <cassert>

#include "boost/format.hpp"

// 2 custom namespaces, to bring in a few useful names :

namespace MyNS_ForOutput {

using std::cout; using std::cerr;

using std::string;

using std::endl; using std::flush;

using boost::format;

using boost::io::group;

}

namespace MyNS_Manips {

using std::setfill;

using std::setw;

using std::hex ;

using std::dec ;

// gcc-2.95 doesnt define the next ones

// using std::showbase ;

// using std::left ;

// using std::right ;

// using std::internal ;

}

int main(){

using namespace MyNS_ForOutput;

using namespace MyNS_Manips;

std::cout << format("%|1$1| %|2$3|") % "Hello" % 3 << std::endl;

// Reordering :

cout << format("%1% %2% %3% %2% %1% \n") % "o" % "oo" % "O"; // 'simple' style.

// prints "o oo O oo o \n"

cout << format("(x,y) = (%1$+5d,%2$+5d) \n") % -23 % 35; // Posix-Printf style

// No reordering :

cout << format("writing %s, x=%s : %d-th step \n") % "toto" % 40.23 % 50;

// prints "writing toto, x=40.23 : 50-th step \n"

cout << format("(x,y) = (%+5d,%+5d) \n") % -23 % 35;

cout << format("(x,y) = (%|+5|,%|+5|) \n") % -23 % 35;

cout << format("(x,y) = (%|1$+5|,%|2$+5|) \n") % -23 % 35;

// all those are the same, it prints "(x,y) = ( -23, +35) \n"

// Using manipulators, via 'group' :

cout << format("%2% %1% %2%\n") % 1 % group(setfill('X'), hex, setw(4), 16+3) ;

// prints "XX13 1 XX13\n"

// printf directives's type-flag can be used to pass formatting options :

cout << format("_%1$4d_ is : _%1$#4x_, _%1$#4o_, and _%1$s_ by default\n") % 18;

// prints "_ 18_ is : _0x12_, _ 022_, and _18_ by default\n"

// Taking the string value :

std::string s;

s= str( format(" %d %d ") % 11 % 22 );

assert( s == " 11 22 ");

// -----------------------------------------------

// %% prints '%'

cout << format("%%##%#x ") % 20 << endl;

// prints "%##0x14 "

// -----------------------------------------------

// Enforcing the right number of arguments

// Too much arguments will throw an exception when feeding the unwanted argument :

try {

format(" %1% %1% ") % 101 % 102;

// the format-string refers to ONE argument, twice. not 2 arguments.

// thus giving 2 arguments is an error

}

catch (boost::io::too_many_args& exc) {

cerr << exc.what() << "\n\t\t***Dont worry, that was planned\n";

}

// Too few arguments when requesting the result will also throw an exception :

try {

cerr << format(" %|3$| ") % 101;

// even if %1$ and %2$ are not used, you should have given 3 arguments

}

catch (boost::io::too_few_args& exc) {

cerr << exc.what() << "\n\t\t***Dont worry, that was planned\n";

}

cerr << "\n\nEverything went OK, exiting. \n";

return 0;

}

输出:

Hello 3

o oo O oo o

(x,y) = ( -23, +35)

writing toto, x=40.23 : 50-th step

(x,y) = ( -23, +35)

(x,y) = ( -23, +35)

(x,y) = ( -23, +35)

XX13 1 XX13

_ 18_ is : _0x12_, _ 022_, and _18_ by default

%##0x14

boost::too_many_args: format-string refered to less arguments than were passed

***Dont worry, that was planned

boost::too_few_args: format-string refered to more arguments than were passed

***Dont worry, that was planned

Everything went OK, exiting.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有