2012-03-29 76 views
2

如何使用字符串或std::string創建boost::format類型的格式化程序對象。
試圖使用下列不運行的代碼。要實現代碼等同於下面的代碼(語義):boost :: format表單c-string或std :: string

format fobj("first-> %1% , second-> %2%"); 
    std::stringstream s; 
    s<<fobj %1 %"%1%."; //so that I can use s.str() to create a boost object 
// How to create fmt object HERE 
    ss<< fmt %"replacedtext"; 
    cout<<s.str()<<endl; 
    cout<<ss.str(); 

樣品情況下:
小號「第一方> 1,二階>%1%」。
以便我可以使用此s.str()字符串來創建另一個格式對象fmt,我可以向其提供替換值。

任何想法的人?

回答

4

我不清楚你想要做什麼,boost::format文檔是一個很好的開始,有很多清晰的例子展示瞭如何使用這個類。

您可以通過不同的操作創建一個格式化程序對象和提要元素(不同於說,printf,其中所有參數都需要滿足您傳入的va_arg)。

boost::format fmter("%2% %1%"); 
fmter % 36; 
fmter % 77; 

然後,您可以從結果中獲得一個字符串。

std::string s = fmter.str(); 

請注意有一個number of exceptions可以引發。

如果您正在尋找能夠動態創建格式字符串的內容,您可以通過多種方式來實現。

std::string strFormatString = "first-> %1% second-> %2%"; 
boost::format formatter(strFormatString.c_str()); 
formatter % value1; 
formatter % strFormatString.c_str(); 
boost::format secondFormatter(formatter.str()); // etc etc etc 
+0

的目標是完全相反你寫:)什麼 你所寫的內容是 的std :: string s = fmter.str(); 從語義上說從格式化程序獲取字符串。 我的意思是賽門鐵克是從字符串中獲得一個格式化程序。該字符串可能來自格式化程序或其他東西 – Abhinav 2012-03-29 11:17:35

+0

編輯答案:-) – Konrad 2012-03-29 11:19:08

+0

謝謝@Konrad。那正是我所期待的。 – Abhinav 2012-03-29 11:25:58

相關問題