boost/format試用

來源:互聯網
上載者:User
   下面這段程式是c#中如何進行字串格式的程式碼片段:1            Console.WriteLine(string.Format("{0} is {1} is {2}", 1, "dxfcv222", 123.45678f));
2

   大家可以看到,簡單明了非常好用。format函數甚至允許多個位置採用相同的參數,比如:1            Console.WriteLine(string.Format("{0} is {1} is {1}", 1, "dxfcv222", 123.45678f));
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。易用性不好。

   為此,我寫了個格式化串的類FormatString,其出發點就是在c++中類比c#中串格式化文法,減少出錯可能性,提高易用性。其典型使用程式碼片段如下:1string buffer = FormatString("scene\\{0}.ini") << serial << OVER;

   缺點是效率不高,能處理的情況也很有限(只能處理基礎資料型別 (Elementary Data Type))  。無法設定參數格式化精度和輸出樣式(比如靠左對齊,局中對齊等),輸入鍵台等。

   下面向大家介紹我們今天的明星,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

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

   有興趣的朋友可以到 boost 網站查詢關於 format 類型的更多資訊。網址如下:
   http://www.boost.org。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.