![]() |
Home | Libraries | People | FAQ | More |
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 則更為方便。 |