boost format是一个不错的格式化方法
转载一篇博客:http://blog.csdn.net/yacper/article/details/8026007
boost::format 基本使用
而 Boost 的 Format 這個函式庫(官方介紹),基本上就是為了讓程式設計師可以更簡單地使用 C++ 的 iostream 來進行格式化輸出而開發的!如同 Heresy 在一開始就提過的,boost::format 提供了一個和 C 的 printf 類似的格式化字串(format string)的語法定義,來讓程式開發者可以非常簡單地做到和 printf 一樣效果的格式化輸出∼而同時,他也保有了 C++ 的 iostraem 的各項優勢,對於要做格式化輸出的 C++ 程式開發人員來說,boost::format 應該是個相當好用、也值得一試的的函式庫!
boost::format 是一個 header-only 的函式庫,只要準備好 header 檔,不用預先編譯就可以使用了,在使用上相當地便利。而在這個函式庫裡,主要是提供了一個 format 的類別(註一),來讓程式開發者來做操作。下面是一個簡單的例子:
#include <stdlib.h> #include <iostream> #include <boost/format.hpp> using namespace std; int main( ) { cout << boost::format( "%2.3f, %d" ) % 1.23456 % 12 << endl; }
黃底的部分,就是 boost::format 相關的程式了。首先,要使用 boost::format,我們必須要先 include「boost/format.hpp」這個檔案;只要 include 了這個檔案後,就可以使用 boost::format 的功能了。
而 boost::format 最接近 printf 的用法,也就是上面這樣的形式(POSIX-printf style)了∼這樣的寫法在透過 cout 做輸出後的結果,會和
printf( "%2.3f, %d", 1.23456, 12 );
完全一樣。
實際上,這邊是使用「"%2.3f, %d"」這個格式化字串,來建立一個 boost::format 的物件,並透過這個物件來做之後格式化的操作;而這邊所使用的格式化字串,和使用 printf 時是完全相同的。
而除了上面這種「Posix-Printf style 」以外,也還有所謂的「simple style」(簡單風格)的用法可以使用,下面就是一個簡單的例子:
cout << boost::format( "%1%, %2%" ) % 1.23456 % 12 << endl;
在這種風格的寫法中,是在格式化字串裡,用「%1%」來代表之後的第一個變數、用「%2%」來代表第二個變數;透過這樣的定義,我們就可以自行調整變數的順序、同時也可以重複地使用某一項變數了∼例如:
cout << boost::format( "%1%, %2%, %1%" ) % 1.23456 % 12 << endl;
這樣寫的話,輸出的結果就會是「1.23456, 12, 1.23456」。 不過由於這個寫法沒有特別指定格式化的設定,所以所有變數都會用預設的方法做輸出。