123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE header PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
- "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
- <!--
- Copyright 2003, Eric Friedman, Itay Maman.
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- -->
- <header name="boost/variant/recursive_variant.hpp">
- <namespace name="boost">
- <typedef name="recursive_variant_">
- <type><emphasis>unspecified</emphasis></type>
- </typedef>
- <class name="make_recursive_variant">
- <purpose>Simplifies declaration of recursive <code>variant</code> types.</purpose>
- <template>
- <template-type-parameter name="T1"/>
- <template-type-parameter name="T2">
- <default><emphasis>unspecified</emphasis></default>
- </template-type-parameter>
- <template-varargs/>
- <template-type-parameter name="TN">
- <default><emphasis>unspecified</emphasis></default>
- </template-type-parameter>
- </template>
- <description>
- <para><code>type</code> has behavior equivalent in every respect to
- some <code>variant< U1, U2, ..., UN ></code>, where each type
- <code>U<emphasis>i</emphasis></code> is the result of the
- corresponding type <code>T<emphasis>i</emphasis></code> undergone a
- transformation function. The following pseudo-code specifies the
- behavior of this transformation (call it <code>substitute</code>):
- <itemizedlist>
- <listitem>If <code>T<emphasis>i</emphasis></code> is
- <code>boost::recursive_variant_</code> then:
- <code>variant< U1, U2, ..., UN ></code>;</listitem>
- <listitem>Else if <code>T<emphasis>i</emphasis></code> is of the
- form <code>X *</code> then:
- <code>substitute(X) *</code>;</listitem>
- <listitem>Else if <code>T<emphasis>i</emphasis></code> is of the
- form <code>X &</code> then:
- <code>substitute(X) &</code>;</listitem>
- <listitem>Else if <code>T<emphasis>i</emphasis></code> is of the
- form <code>R (*)( X1, X2, ..., XN )</code> then:
- <code>substitute(R) (*)( substitute(X1), substitute(X2), ..., substitute(XN) )</code>;</listitem>
- <listitem>Else if <code>T<emphasis>i</emphasis></code> is of the
- form <code>F < X1, X2, ..., XN ></code> then:
- <code>F< substitute(X1), substitute(X2), ..., substitute(XN) ></code>;</listitem>
- <listitem>Else: <code>T<emphasis>i</emphasis></code>.</listitem>
- </itemizedlist>
- </para>
- <para>Note that cv-qualifiers are preserved and that the actual
- process is generally a bit more complicated. However, the above does
- convey the essential idea as well as describe the extent of the
- substititions.</para>
- <para>Use of <code>make_recursive_variant</code> is demonstrated in
- <xref linkend="variant.tutorial.recursive.recursive-variant"/>.</para>
- <para><emphasis role="bold">Portability</emphasis>: Due to standard
- conformance issues in several compilers,
- <code>make_recursive_variant</code> is not universally supported. On
- these compilers the library indicates its lack of support via the
- definition of the preprocessor symbol
- <code><macroname>BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT</macroname></code>.</para>
- </description>
- <typedef name="type">
- <type><classname>boost::variant</classname>< <emphasis>unspecified</emphasis> ></type>
- </typedef>
- </class>
-
- <class name="make_recursive_variant_over">
- <purpose>
- <simpara>Exposes a recursive <code>variant</code> whose bounded types
- are the elements of the given type sequence.</simpara>
- </purpose>
- <template>
- <template-type-parameter name="Sequence"/>
- </template>
- <typedef name="type">
- <type>variant< <emphasis>unspecified</emphasis> ></type>
- </typedef>
- <description>
- <simpara><code>type</code> has behavior equivalent in every respect to
- <code><classname>make_recursive_variant</classname>< Sequence[0], Sequence[1], ... >::type</code>
- (where <code>Sequence[<emphasis>i</emphasis>]</code> denotes the
- <emphasis>i</emphasis>-th element of <code>Sequence</code>), except
- that no upper limit is imposed on the number of types.</simpara>
- <simpara><emphasis role="bold">Notes</emphasis>:</simpara>
- <itemizedlist>
- <listitem><code>Sequence</code> must meet the requirements of
- <libraryname>MPL</libraryname>'s <emphasis>Sequence</emphasis>
- concept.</listitem>
- <listitem>Due to standard conformance problems in several compilers,
- <code>make_recursive_variant_over</code> may not be supported on
- your compiler. See
- <code><macroname>BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT</macroname></code>
- for more information.</listitem>
- </itemizedlist>
- </description>
- </class>
- </namespace>
- </header>
|