[BOOST] BOOST::Format
這句話將在標(biāo)準(zhǔn)輸出上輸出“Yousen says "Hello" to Yousen.”
接下來簡(jiǎn)單說明一下format的用法。估計(jì)聰明人都猜到了,在格式化字符串中,“%1%”(不帶引號(hào),后稱占位符)表示后面跟的第一個(gè)參數(shù),“%2%”則表示第二個(gè),以此類推——注意:占位符是從1開始計(jì)數(shù),兄弟們別記錯(cuò)了。后面的“%”(當(dāng)然也不帶引號(hào))操作符的意思么……這是format類(千萬別把它當(dāng)作是個(gè)函數(shù))重載的操作符,用來替換格式化字符串中的占位符。
剛才說了,format是個(gè)類,確切的說format是這樣定義的:
?
看清楚了哦,要想用unicode(寬字符)版的format,就用wformat。
?
typedef basic_format<wchar_t> wformat;
現(xiàn)在來試試format的實(shí)例:
#include <iostream>
#include <string>
using namespace std;
using namespace boost;
int main()
{
?format fmt( "%2% says \"%1%\"." );
?fmt % "Yousen";
?fmt % "Hello";
?string str = fmt.str();
?cout << "string from fmt: " << str << endl;
?cout << "fmt: " << fmt << endl;
}
輸出:
fmt: Hello says "Yousen".
假如已經(jīng)有一個(gè)format對(duì)象了,想要改變格式化字符串,調(diào)用format::parse方法。如:
fmt.parse( "%1% %2%" );
在獲取fmt輸出之前,若是參數(shù)不足或者多余格式化字符串所指定的數(shù)量,則可能會(huì)拋出下列異常:
too_few_args
too_many_args
out_of_range
這些都是format_error類的派生類,format_error則派生于std::exception類。
?
上面舉例的format格式字符串都是非常簡(jiǎn)單的。format實(shí)際上提供了非常強(qiáng)大的格式化控制。這是格式化字符串中占位符的完整語法:
其中N為參數(shù)序號(hào),從1開始計(jì)數(shù);flags是格式控制標(biāo)志;width為格式化輸出寬度,.precision為顯示小數(shù)點(diǎn)后面位數(shù);type-char為輸出類型控制符——除了序號(hào),其他內(nèi)容和printf中的一樣。不羅嗦了。自己看后面的參考站點(diǎn)。
注意前面有個(gè)%,如果用簡(jiǎn)單模式(僅表示參數(shù)序號(hào)),后面也得跟上一個(gè)%。
除此之外,format也兼容prinf風(fēng)格格式化字符串,但是不能和format自己的格式化字符串混用。如“%s says %2%”這樣是不行滴,運(yùn)行時(shí)會(huì)拋出異常。還有,在使用printf風(fēng)格字符串時(shí),所有跟進(jìn)的參數(shù)都將順序替換占位符。
最后一點(diǎn)是關(guān)于用戶自定義類的格式化,原則上,只要定義了相應(yīng)的流輸出(operator<<(std::ostream,...))操作符,就能夠被format所支持。而且假如指定了詳細(xì)的格式,format則會(huì)盡可能的去實(shí)現(xiàn)。也不羅嗦了,洗澡睡覺!
其他詳細(xì)情況則參考:http://www.boost.org/libs/format/doc/format.html
?
轉(zhuǎn)載于:https://www.cnblogs.com/bouygues/archive/2012/12/24/4479997.html
總結(jié)
以上是生活随笔為你收集整理的[BOOST] BOOST::Format的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos服务器解决vsftp连接时的
- 下一篇: 2012平安夜