boost/format试用
下面这段程序是c#中如何进行字符串格式的代码片段:
在c++中串格式化函数就没那么好用了。下面给出一段c++中进行串格式化的代码:
为此,我写了个格式化串的类FormatString,其出发点就是在c++中模拟c#中串格式化语法,减少出错可能性,提高易用性。其典型使用代码片段如下:
缺点是效率不高,能处理的情况也很有限(只能处理基本数据类型) 。无法设置参数格式化精度和输出样式(比如左对齐,局中对齐等),字符填充等。
下面向大家介绍我们今天的明星,boost/format~~~~~~~~~~~~~~~~~~~~~`。
format 类型是boost库中包含的一个用来格式化串的类型。该类型兼容了c风格的
串格式化格式,同时也提供了一套更加直观的boost 风格的串格式化格式。另外该类型提供了一些printf()函数不支持的特性,比如输入参数局中显式,用户自定义类型格式化输出等。下面给出部分使用代码片段:
有兴趣的朋友可以到 boost 网站查询关于 format 类型的更多信息。网址如下:
http://www.boost.org。
1
Console.WriteLine(string.Format("{0} is {1} is {2}", 1, "dxfcv222", 123.45678f));
2
大家可以看到,简单明了非常好用。format函数甚至允许多个位置采用相同的参数,比如:
2

1
Console.WriteLine(string.Format("{0} is {1} is {1}", 1, "dxfcv222", 123.45678f));
2

2

在c++中串格式化函数就没那么好用了。下面给出一段c++中进行串格式化的代码:
1
char buffer3[256];
2
sprintf(buffer3, "%5d is % 5.6s is %-7.2f", 1, "1234567", 12.34567);
3
cout << buffer3 << endl;
4
大家可以看到,这样一段代码,其实问题是很多的。1。我们申请了一个缓冲区,其大小是256,该缓冲区如果开大了造成资源浪费,如果开小了那肯定会异常,多么头疼的问题。2。无法在编译期检测出格式化串输入错误问题,比如我们把"%5d is % 5.6s is %-7.2f"错输入为"%5a is % 5.6s is %-7.2f"这个错误只有在程序崩溃的时候才能够暴露出来。3。易用性不好。
2

3

4

为此,我写了个格式化串的类FormatString,其出发点就是在c++中模拟c#中串格式化语法,减少出错可能性,提高易用性。其典型使用代码片段如下:
1
string buffer = FormatString("scene\\{0}.ini") << serial << OVER;

缺点是效率不高,能处理的情况也很有限(只能处理基本数据类型) 。无法设置参数格式化精度和输出样式(比如左对齐,局中对齐等),字符填充等。
下面向大家介绍我们今天的明星,boost/format~~~~~~~~~~~~~~~~~~~~~`。
format 类型是boost库中包含的一个用来格式化串的类型。该类型兼容了c风格的
串格式化格式,同时也提供了一套更加直观的boost 风格的串格式化格式。另外该类型提供了一些printf()函数不支持的特性,比如输入参数局中显式,用户自定义类型格式化输出等。下面给出部分使用代码片段:
1
//c 风格的格式化。
2
cout << format("%5d is % 5.6s is %-7.2f") % 1 % "1234567" % 12.34567 << endl;
3

2

3

1
//boost 风格格式化。
2
cout << format("%1% is %2% is %3%") % 1
3
% 1.234f
4
% "dxfcv222" << endl;

2

3

4

有兴趣的朋友可以到 boost 网站查询关于 format 类型的更多信息。网址如下:
http://www.boost.org。