版權所有 © 2001 Kevlin Henney
版權所有 © 2013-2024 Antony Polukhin
依據 Boost 軟體授權條款 1.0 版散布。(請參閱隨附檔案 LICENSE_1_0.txt 或複製於 https://boost.dev.org.tw/LICENSE_1_0.txt)
目錄
有時候需要一種泛型(此處泛指「通用」,而非「基於模板的程式設計」)類型:變數可以真正地變化,容納許多其他更特定類型的值,而不是 C++ 通常嚴格且靜態的類型。我們可以區分三種基本泛型類型:
int
和 string
,並可在它們之間自由轉換,例如將 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
)的替代方案,它不需要從所持有的類型進行複製或移動建構。