Class template make_recursive_variant
boost::make_recursive_variant — Simplifies declaration of recursive variant
types.
Synopsis
Description
type
имеет эквивалент поведения во всех отношениях по отношению к некоторому варианту< U1, U2, ..., UN >
, где каждый тип Ui
является результатом соответствующего типа Ti
, претерпевавшего функцию преобразования. Следующий псевдокод определяет поведение этого преобразования (назовем его substitute
):
- Если
Ti
boost::recursive_variant_
, то: variant
;
- Если
Ti
имеет форму X *
, то: substitute(X) *
;
- Если
Ti
имеет форму X &
, то: substitute(X) &
;
- Если
Ti
имеет форму R (*)(X1, X2,..., XN)
, то: заменитель (R) (*)(заменитель(X1), заменитель(X2), ..., заменитель(XN))
;
- Если
Ti
имеет форму F
, то: F<заменитель(X1), заменитель(X2), ..., заменитель(XN) >
;
- Другое:
Ti
.
Обратите внимание, что cv-квалификаторы сохраняются и что фактический процесс, как правило, немного сложнее. Тем не менее, вышеизложенное передает основную идею, а также описывает степень замещения.
Использование make_recursive_variant
показано в разделе под названием “Рекурсивные типы с make_recursive_variant
”.
Портативность: Из-за проблем стандартного соответствия в нескольких компиляторах make_recursive_variant
не поддерживается повсеместно. На этих компиляторах библиотека указывает на отсутствие поддержки через определение символа препроцессора BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT
.