Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Chapter 2. Boost.Any

Kevlin Henney

Table of Contents目錄

Introduction簡介
Examples例子
Reference參考
ValueType 的要求
頭文件 <boost/any.hpp>
Acknowledgements感謝

Introduction簡介

我們經常會需要一個泛型(這個泛型可不是模板編程中的泛型)的類型:變量是真正的變量,可以帶有多種不同類型的值,而不是象普通的C++靜態類型那樣。我們可以分出三種基本的泛型類型:

  • 可轉換類型,可以是多個可能的值類型之一,如 intstring, 可以自由地在兩者間轉換,例如將 5 解釋為 "5",反之亦然。在腳本或其它解釋語言中,這種類型稱為通用類。boost::lexical_cast 支持這種轉型功能。

  • 可識別類型,包含了不同類型的值,但不會試圖在不同類型間進行轉換,即:5 被嚴格視為一個 int 而不會隱式地轉換為 "5"5.0. 它們不關心如何解釋,但清楚自己的類型,所以是保存單個值的安全的泛型容器,但不能進行不明確的轉換。

  • 不受限制的類型,可以引向任意物但不瞭解真實的類型,只能依靠程序員在訪問和解釋該值所用的形式。這種情形其實是由 void *實現,可能會發生大量的意外和未定義行為。

boost::any 類(基於Kevlin Henney在 "Valued Conversions"中所描述的同名類,C++ Report 12(7), July/August 2000) 是一種基於以上第二種類型的泛型類型。它支持任意值類型間的複製,以及帶嚴格類型安全檢查的值讀取。一個類似的設計,可以提供更多合適的操作符,可用於泛型函數適配器,any_function, 泛型迭代器適配器,any_iterator, 以及其它需要統一的運行時處理,但只支持編譯時模板參數一致性的對象類型。

Last revised: November 04, 2005 at 09:34:36 GMT


PrevUpHomeNext