![]() |
Home | Libraries | People | FAQ | More |
boost::make_recursive_variant — 簡化遞歸 variant 類型的聲明。
template<typename T1, typename T2 = unspecified, ...,
typename TN = unspecified>
class make_recursive_variant {
public:
// types
typedef boost::variant< unspecified > type;
};
type 的行為在各方面均等同於 variant< U1, U2, ..., UN >, 其中每個類型 Ui 為相應的類型 Ti
經過轉化函數後所得的結果。以下偽代碼給出了這一轉化(我們稱之為 substitute)的行為:
Ti
是 boost::recursive_variant_ 則返回:variant< U1, U2, ..., UN >;
Ti 形如 X *
則返回:substitute(X) *;
Ti 形如 X
& 則返回:substitute(X) &;
Ti 形如 R (*)( X1,
X2, ..., XN ) 則返回:substitute(R) (*)(
substitute(X1), substitute(X2), ..., substitute(XN) );
Ti 形如 F < X1,
X2, ..., XN > 則返回:F< substitute(X1),
substitute(X2), ..., substitute(XN) >;
Ti. 注意,cv-限定符被保留,而且實際過程還要更複雜一點。不過,上述代碼已經表達了這一替換操作的基本意思。
有關 make_recursive_variant 的用例,請見 “make_recursive_variant 的遞歸類型” 一節。
可移植性:由於某些編譯器的標準符合問題,make_recursive_variant
並不被完全支持。在這些編譯器上,本庫通過定義一個預處理器符號 BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT
來表示支持上的不足。