Boost C++ 函式庫

...世界上最受推崇且設計精良的 C++ 函式庫專案之一。 Herb SutterAndrei Alexandrescu,《C++ 程式碼規範

PrevUpHomeNext

第四章 Boost.Any 1.2

依據 Boost 軟體授權條款 1.0 版散布。(請參閱隨附檔案 LICENSE_1_0.txt 或複製於 https://boost.dev.org.tw/LICENSE_1_0.txt)

目錄

簡介
範例
值類型 的要求
Boost.Any 參考章節
標頭檔 <boost/any.hpp>
標頭檔 <boost/any/bad_any_cast.hpp>
標頭檔 <boost/any/basic_any.hpp>
標頭檔 <boost/any/fwd.hpp>
標頭檔 <boost/any/unique_any.hpp>
致謝

有時候需要一種泛型(此處泛指「通用」,而非「基於模板的程式設計」)類型:變數可以真正地變化,容納許多其他更特定類型的值,而不是 C++ 通常嚴格且靜態的類型。我們可以區分三種基本泛型類型:

  • 可轉換類型:可以容納多種可能值類型,例如 intstring,並可在它們之間自由轉換,例如將 5 解釋為 "5" 或反之亦然。這種類型在腳本語言和其他直譯語言中很常見。boost::lexical_cast 支援此類轉換功能。
  • 可區分類型:包含不同類型的值,但不嘗試在它們之間進行轉換,即 5 嚴格地作為 int 存放,並且不會隱式轉換為 "5"5.0。它們不考慮解釋但意識到類型,有效地使它們成為安全的、單值的泛型容器,不會因為模稜兩可的轉換而產生意外。
  • 不可區分類型:可以指向任何東西,但不知道實際的底層類型,將所有形式的存取和解釋都交給程式設計師。這個利基市場主要由 void * 主導,它提供了許多產生意外未定義行為的空間。

boost::any 類別(基於 Kevlin Henney 在《C++ Report》12(7),2000 年 7/8 月刊中描述的同名類別,值轉換)是一種基於第二種類別的變體值類型。它支援複製任何值類型,並根據其類型安全地檢查提取該值。類似的設計(提供更合適的運算子)可用於泛型函數配接器 any_function、泛型迭代器配接器 any_iterator 以及其他需要統一執行時期處理但僅支援編譯時期模板參數一致性的物件類型。

boost::anys::unique_any 類別(基於 utils::AnyMovable 類別,來自 🐙 userver 框架)是一種基於第二種類別的變體值類型。它支援針對其類型進行安全檢查的取值,並轉移值的所有權。可以將 boost::anys::unique_any 視為 boost::any(或 std::any)的替代方案,它不需要從所持有的類型進行複製或移動建構。


PrevUpHomeNext