Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

類模板 make_recursive_variant

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)的行為:

  • 如果 Tiboost::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 來表示支持上的不足。


PrevUpHomeNext