Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

函數 get

boost::get —

從給定的 variant 中取出指定類型的值。

摘要

template<typename U, typename T1, typename T2, ..., typename TN> 
  U * get(variant<T1, T2, ..., TN> * operand);
template<typename U, typename T1, typename T2, ..., typename TN>
  const U * get(const variant<T1, T2, ..., TN> * operand);
template<typename U, typename T1, typename T2, ..., typename TN>
  U & get(variant<T1, T2, ..., TN> & operand);
template<typename U, typename T1, typename T2, ..., typename TN>
  const U & get(const variant<T1, T2, ..., TN> & operand);

說明

get 函數取出給定 variant 中的內容,該過程是運行期檢查的、類型安全的。該函數僅在內容的類型為 U 時成功返回,關於失敗的情況描述如下。

警告:operand 或其內容銷毀後(例如,給定的 variant 被賦予另一個不同類型的值),返回的引用將變為無效。因此,在使用返回的引用時必須特別小心謹慎。

說明: 作為類型安全保證的一部分,get 保持 const-正確性。因此,只要 operand 或其內容是 const-限定的,則類型 U 必須也是 const-限定的。不過反之則不然:即使 operand 及其內容不是 const-限定的,類型 U 也可以是 const-限定的。
返回: 如果傳入的是一個指針,則 get 在其內容的類型為 U 時返回該內容值的指針;否則返回一個空指針。如果傳入的是一個引用,則 get 在其內容的類型為 U 時返回該內容值的引用;否則拋出一個異常(見後)。
拋出: 接受一個 variant 指針的重載不會拋出;接受一個 variant 引用的重載在所含內容不是類型 U 時拋出 bad_get.
原理: 雖然使用 apply_visitor 的訪問機制由於更好的安全性而更為常用,但在某些情況下使用 get 則更為方便。

PrevUpHomeNext