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.