最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?Boost?Format超詳細(xì)講解

 更新時(shí)間:2022年11月16日 09:16:20   作者:無(wú)水先生  
Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱(chēng)。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱(chēng)

Boost.Format

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

Boost.Format 提供了一個(gè)名為 boost::format 的類(lèi),該類(lèi)在 boost/format.hpp 中定義。與 std::printf() 類(lèi)似,將包含用于控制格式的特殊字符的字符串傳遞給 boost::format 的構(gòu)造函數(shù)。替換輸出中這些特殊字符的數(shù)據(jù)通過(guò)運(yùn)算符 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 格式字符串使用放置在兩個(gè)百分號(hào)之間的數(shù)字作為實(shí)際數(shù)據(jù)的占位符,這些數(shù)據(jù)將使用 operator% 進(jìn)行鏈接。示例 7.1 使用數(shù)字 12、5 和 2014 作為數(shù)據(jù)創(chuàng)建格式為 12.5.2014 的日期字符串。為了使月份出現(xiàn)在日期的前面,這在美國(guó)很常見(jiàn),可以交換占位符。示例 7.2 進(jìn)行了此更改,顯示 2014 年 5 月 12 日

示例 7.2。帶有 boost::format 的編號(hào)占位符

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

為了使用操縱器格式化數(shù)據(jù),Boost.Format 提供了一個(gè)名為 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 對(duì)將與“%1%”關(guān)聯(lián)的值使用操縱器 std::showpos()。因此,此示例將顯示 +1 2 +1 作為輸出。因?yàn)椴倏v器 std::showpos() 已使用 boost::io::group() 鏈接到第一個(gè)數(shù)據(jù)值,所以只要顯示該值,就會(huì)自動(dòng)添加加號(hào)。在這種情況下,格式占位符“%1%”會(huì)使用兩次。

如果加號(hào)僅應(yīng)顯示為 1 的第一個(gè)輸出,則需要自定義格式占位符。

示例 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%”的第一個(gè)實(shí)例被替換為“%|1$+|”。格式的定制不僅僅是添加兩個(gè)額外的管道符號(hào)。對(duì)數(shù)據(jù)的引用也放在管道符號(hào)之間,并使用“1$”而不是“1%”。這是將輸出修改為 +1 2 1 所必需的。您可以在 Boost 文檔中找到有關(guān)格式規(guī)范的詳細(xì)信息。 必須為所有占位符或不指定對(duì)數(shù)據(jù)的占位符引用。示例 7.5 僅提供三個(gè)占位符之一的引用,這會(huì)在運(yùn)行時(shí)生成錯(cuò)誤。

示例 7.5。 boost::io::format_error 以防出錯(cuò)

#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 類(lèi)型的異常。嚴(yán)格來(lái)說(shuō),Boost.Format 會(huì)拋出 boost::io::bad_format_string。但是,由于不同的異常類(lèi)都是從 boost::io::format_error 派生的,因此通常更容易捕獲這種類(lèi)型的異常。

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

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

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

在這種情況下,可以安全地省略第二個(gè)和第三個(gè)占位符的管道符號(hào),因?yàn)樗鼈儧](méi)有指定任何格式。生成的語(yǔ)法與 std::printf() 非常相似(參見(jiàn)示例 7.7)。

示例 7.7。 boost::format 使用來(lái)自 std::printf() 的語(yǔ)法

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

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

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

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

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

Boost.Format 既是類(lèi)型安全的又是可擴(kuò)展的。只要運(yùn)算符 operator<< 為 std::ostream 重載,任何類(lèi)型的對(duì)象都可以與 Boost.Format 一起使用。

示例 7.9。 boost::format 具有用戶(hù)定義的類(lèi)型

#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 將用戶(hù)定義類(lèi)型動(dòng)物的對(duì)象寫(xiě)入標(biāo)準(zhǔn)輸出。這是可能的,因?yàn)榱鬟\(yùn)算符對(duì)于動(dòng)物來(lái)說(shuō)是重載的。

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

相關(guān)文章

  • C語(yǔ)言?xún)?nèi)存函數(shù)的實(shí)現(xiàn)示例

    C語(yǔ)言?xún)?nèi)存函數(shù)的實(shí)現(xiàn)示例

    本文主要介紹了C語(yǔ)言?xún)?nèi)存函數(shù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • C++調(diào)用matlab引擎實(shí)現(xiàn)三維圖的繪制

    C++調(diào)用matlab引擎實(shí)現(xiàn)三維圖的繪制

    這篇文章主要為大家詳細(xì)介紹了C++如何調(diào)用matlab引擎實(shí)現(xiàn)三維圖的繪制,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++和Matlab有一定的幫助,需要的可以參考一下
    2022-12-12
  • C++設(shè)計(jì)模式之建造者模式

    C++設(shè)計(jì)模式之建造者模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之建造者模式,一個(gè)復(fù)雜對(duì)象是由多個(gè)部件組成的,建造者模式是把復(fù)雜對(duì)象的創(chuàng)建和部件的創(chuàng)建分別開(kāi)來(lái),分別用Builder類(lèi)和Director類(lèi)來(lái)表示,需要的朋友可以參考下
    2014-09-09
  • C語(yǔ)言通過(guò)深度優(yōu)先搜索來(lái)解電梯問(wèn)題和N皇后問(wèn)題的示例

    C語(yǔ)言通過(guò)深度優(yōu)先搜索來(lái)解電梯問(wèn)題和N皇后問(wèn)題的示例

    深度優(yōu)先搜索即是對(duì)一個(gè)新發(fā)現(xiàn)的節(jié)點(diǎn)上如果還關(guān)聯(lián)未探測(cè)到的邊,就沿此邊探測(cè)下去,直到發(fā)現(xiàn)從原點(diǎn)可達(dá)的所有點(diǎn)為止,這里我們就來(lái)展示C語(yǔ)言通過(guò)深度優(yōu)先搜索來(lái)解電梯問(wèn)題和N皇后問(wèn)題的示例
    2016-06-06
  • C++中的string庫(kù)函數(shù)常見(jiàn)函數(shù)的作用和使用方法

    C++中的string庫(kù)函數(shù)常見(jiàn)函數(shù)的作用和使用方法

    這篇文章主要介紹了C++中的string庫(kù)函數(shù)常見(jiàn)函數(shù)的作用和使用方法,庫(kù)函數(shù)的靈活應(yīng)用是程序員的一大重要技能,本文通過(guò)實(shí)例實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度,文章基于c語(yǔ)言的相關(guān)資料展開(kāi)詳細(xì)介紹,具有一定的參價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • C++ Cmake的構(gòu)建靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)詳解

    C++ Cmake的構(gòu)建靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)詳解

    這篇文章主要為大家詳細(xì)介紹了C++ Cmake的構(gòu)建靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C++如何調(diào)用matlab函數(shù)

    C++如何調(diào)用matlab函數(shù)

    這篇文章主要介紹了C++如何調(diào)用matlab函數(shù)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • Qt編寫(xiě)秒表功能

    Qt編寫(xiě)秒表功能

    這篇文章主要為大家詳細(xì)介紹了Qt編寫(xiě)秒表功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++ vector容器 find erase的使用操作:查找并刪除指定元素

    C++ vector容器 find erase的使用操作:查找并刪除指定元素

    這篇文章主要介紹了C++ vector容器 find erase的使用操作:查找并刪除指定元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05

最新評(píng)論

桂东县| 丰都县| 陕西省| 鄱阳县| 仪陇县| 津市市| 呼图壁县| 乌鲁木齐县| 博白县| 广宗县| 永修县| 龙陵县| 嫩江县| 台安县| 玉龙| 灯塔市| 弥渡县| 河池市| 仙游县| 许昌市| 浦城县| 丹阳市| 边坝县| 新巴尔虎左旗| 融水| 临泉县| 巨野县| 长乐市| 仁化县| 瑞金市| 如东县| 天水市| 绩溪县| 山西省| 杂多县| 尖扎县| 桑植县| 泽普县| 廉江市| 顺平县| 外汇|