欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++?Boost?Format超詳細講解

 更新時間:2022年11月16日 09:16:20   作者:無水先生  
Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱

Boost.Format

Boost.Format 提供了函數(shù) std::printf() 的替代品。 std::printf() 源自 C 標準并允許格式化數(shù)據(jù)輸出。但是,它既不是類型安全的,也不是可擴展的。 Boost.Format 提供了一種類型安全且可擴展的替代方案。

Boost.Format 提供了一個名為 boost::format 的類,該類在 boost/format.hpp 中定義。與 std::printf() 類似,將包含用于控制格式的特殊字符的字符串傳遞給 boost::format 的構(gòu)造函數(shù)。替換輸出中這些特殊字符的數(shù)據(jù)通過運算符 operator% 鏈接。

示例 7.1。使用 boost::format 格式化輸出

#include <boost/format.hpp>
#include <iostream>
int main()
{
  std::cout << boost::format{"%1%.%2%.%3%"} % 12 % 5 % 2014 << '\n';
}

Boost.Format 格式字符串使用放置在兩個百分號之間的數(shù)字作為實際數(shù)據(jù)的占位符,這些數(shù)據(jù)將使用 operator% 進行鏈接。示例 7.1 使用數(shù)字 12、5 和 2014 作為數(shù)據(jù)創(chuàng)建格式為 12.5.2014 的日期字符串。為了使月份出現(xiàn)在日期的前面,這在美國很常見,可以交換占位符。示例 7.2 進行了此更改,顯示 2014 年 5 月 12 日

示例 7.2。帶有 boost::format 的編號占位符

#include <boost/format.hpp>
#include <iostream>
int main()
{
  std::cout << boost::format{"%2%/%1%/%3%"} % 12 % 5 % 2014 << '\n';
}

為了使用操縱器格式化數(shù)據(jù),Boost.Format 提供了一個名為 boost::io::group() 的函數(shù)。

示例 7.3。使用帶有 boost::io::group() 的操縱器

#include <boost/format.hpp>
#include <iostream>
int main()
{
  std::cout << boost::format{"%1% %2% %1%"} %
    boost::io::group(std::showpos, 1) % 2 << '\n';
}

Example7.3

示例 7.3 對將與“%1%”關聯(lián)的值使用操縱器 std::showpos()。因此,此示例將顯示 +1 2 +1 作為輸出。因為操縱器 std::showpos() 已使用 boost::io::group() 鏈接到第一個數(shù)據(jù)值,所以只要顯示該值,就會自動添加加號。在這種情況下,格式占位符“%1%”會使用兩次。

如果加號僅應顯示為 1 的第一個輸出,則需要自定義格式占位符。

示例 7.4。帶有特殊字符的占位符

#include <boost/format.hpp>
#include <iostream>
int main()
{
  std::cout << boost::format{"%|1$+| %2% %1%"} % 1 % 2 << '\n';
}

Example7.4

??? 示例 7.4 就是這樣做的。在此示例中,占位符“%1%”的第一個實例被替換為“%|1$+|”。格式的定制不僅僅是添加兩個額外的管道符號。對數(shù)據(jù)的引用也放在管道符號之間,并使用“1$”而不是“1%”。這是將輸出修改為 +1 2 1 所必需的。您可以在 Boost 文檔中找到有關格式規(guī)范的詳細信息。 必須為所有占位符或不指定對數(shù)據(jù)的占位符引用。示例 7.5 僅提供三個占位符之一的引用,這會在運行時生成錯誤。

示例 7.5。 boost::io::format_error 以防出錯

#include <boost/format.hpp>
#include <iostream>
int main()
{
  try
  {
    std::cout << boost::format{"%|+| %2% %1%"} % 1 % 2 << '\n';
  }
  catch (boost::io::format_error &ex)
  {
    std::cout << ex.what() << '\n';
  }
}

Example7.5

示例 7.5 引發(fā)了 boost::io::format_error 類型的異常。嚴格來說,Boost.Format 會拋出 boost::io::bad_format_string。但是,由于不同的異常類都是從 boost::io::format_error 派生的,因此通常更容易捕獲這種類型的異常。

示例 7.6 展示了如何在不使用格式字符串中的引用的情況下編寫程序。

示例 7.6。沒有數(shù)字的占位符

#include <boost/format.hpp>
#include <iostream>
int main()
{
  std::cout << boost::format{"%|+| %|| %||"} % 1 % 2 % 1 << '\n';
}

在這種情況下,可以安全地省略第二個和第三個占位符的管道符號,因為它們沒有指定任何格式。生成的語法與 std::printf() 非常相似(參見示例 7.7)。

示例 7.7。 boost::format 使用來自 std::printf() 的語法

#include <boost/format.hpp>
#include <iostream>
int main()
{
  std::cout << boost::format{"%+d %d %d"} % 1 % 2 % 1 << '\n';
}

雖然格式可能看起來像 std::printf() 使用的格式,但 Boost.Format 提供了類型安全的優(yōu)勢。格式字符串中的字母“d”不表示數(shù)字的輸出。相反,它將操縱器 std::dec() 應用于 boost::format 使用的內(nèi)部流對象。這使得指定對 std::printf() 沒有意義的格式字符串成為可能,并且會導致崩潰。

示例 7.8。 boost::format 帶有看似無效的占位符

#include <boost/format.hpp>
#include <iostream>
int main()
{
  std::cout << boost::format{"%+s %s %s"} % 1 % 2 % 1 << '\n';
}

std::printf() 只允許 const char* 類型的字符串使用字母“s”。使用 std::printf() 時,“%s”和數(shù)值的組合會失敗。但是,示例 7.8 完美運行。 Boost.Format 不需要字符串。相反,它應用適當?shù)牟倏v器來配置內(nèi)部流。

Boost.Format 既是類型安全的又是可擴展的。只要運算符 operator<< 為 std::ostream 重載,任何類型的對象都可以與 Boost.Format 一起使用。

示例 7.9。 boost::format 具有用戶定義的類型

#include <boost/format.hpp>
#include <string>
#include <iostream>
struct animal
{
  std::string name;
  int legs;
};
std::ostream &operator<<(std::ostream &os, const animal &a)
{
  return os << a.name << ',' << a.legs;
}
int main()
{
  animal a{"cat", 4};
  std::cout << boost::format{"%1%"} % a << '\n';
}

Example7.9

示例 7.9 使用 boost::format 將用戶定義類型動物的對象寫入標準輸出。這是可能的,因為流運算符對于動物來說是重載的。

到此這篇關于C++ Boost Format超詳細講解的文章就介紹到這了,更多相關C++ Boost Format內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Qt開發(fā)實現(xiàn)跨窗口信號槽通信

    Qt開發(fā)實現(xiàn)跨窗口信號槽通信

    這篇文章主要為大家詳細介紹了Qt開發(fā)實現(xiàn)跨窗口信號槽通信,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言從零探索函數(shù)的知識

    C語言從零探索函數(shù)的知識

    函數(shù)是一組一起執(zhí)行一個任務的語句。每個 C 程序都至少有一個函數(shù),即主函數(shù) main() ,所有簡單的程序都可以定義其他額外的函數(shù),讓我們一起來了解它
    2022-04-04
  • C語言基礎之格式化輸出控制長度

    C語言基礎之格式化輸出控制長度

    這篇文章主要介紹了C語言基礎之格式化輸出控制長度的相關資料,需要的朋友可以參考下
    2017-04-04
  • 關于c語言指針的兩處小tip分享

    關于c語言指針的兩處小tip分享

    本篇文章是對c語言中指針的兩處小tip進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Qt音視頻開發(fā)之利用ffmpeg實現(xiàn)倍速播放

    Qt音視頻開發(fā)之利用ffmpeg實現(xiàn)倍速播放

    這篇文章主要為大家詳細介紹了在Qt音視頻開發(fā)中如何利用ffmpeg實現(xiàn)倍速播放功能(半倍速/2倍速/4倍速/8倍速),感興趣的小伙伴可以了解一下
    2022-11-11
  • break的使用for循環(huán)嵌套示例

    break的使用for循環(huán)嵌套示例

    這篇文章主要介紹了break的使用for循環(huán)嵌套示例,需要的朋友可以參考下
    2014-02-02
  • 解析C++編程中如何使用設計模式中的狀態(tài)模式結(jié)構(gòu)

    解析C++編程中如何使用設計模式中的狀態(tài)模式結(jié)構(gòu)

    這篇文章主要介紹了如何在C++編程中適用設計模式中的狀態(tài)模式結(jié)構(gòu),狀態(tài)模式強調(diào)將特定狀態(tài)相關的邏輯分散到一些類的狀態(tài)類中,需要的朋友可以參考下
    2016-03-03
  • C/C++中提高查找速度的小技巧

    C/C++中提高查找速度的小技巧

    這篇文章主要給大家介紹了C/C++中提高數(shù)組中查找某個元素或者字符串中查找某個字符效率的小技巧,提高速度對我們?nèi)粘i_發(fā)來說還是很有用的,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Dev-C++調(diào)試方法的具體使用

    Dev-C++調(diào)試方法的具體使用

    本文主要介紹了Dev-C++調(diào)試方法的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C語言枚舉類型詳解

    C語言枚舉類型詳解

    這篇文章主要介紹了C語言枚舉類型詳解的相關資料,需要的朋友可以參考下
    2023-05-05

最新評論