1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Function apply_visitor</title>
<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
<link rel="up" href="../variant/reference.html#header.boost.variant.apply_visitor_hpp" title="Header <boost/variant/apply_visitor.hpp>">
<link rel="prev" href="apply_visitor_delayed_t.html" title="Class template apply_visitor_delayed_t">
<link rel="next" href="../BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS.html" title="Macro BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
<td align="center"><a href="../../../index.html">Home</a></td>
<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="apply_visitor_delayed_t.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../variant/reference.html#header.boost.variant.apply_visitor_hpp"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="refentry">
<a name="boost.apply_visitor"></a><div class="titlepage"></div>
<div class="refnamediv">
<h2><span class="refentrytitle">Function apply_visitor</span></h2>
<p>boost::apply_visitor — Allows compile-time checked type-safe application of the
given visitor to the content of the given variant, ensuring that all
types are handled by the visitor.</p>
</div>
<h2 xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv-title">Synopsis</h2>
<div xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv"><pre class="synopsis"><span class="comment">// In header: <<a class="link" href="../variant/reference.html#header.boost.variant.apply_visitor_hpp" title="Header <boost/variant/apply_visitor.hpp>">boost/variant/apply_visitor.hpp</a>>
</span>
<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Visitor<span class="special">,</span> <span class="keyword">typename</span> Variant<span class="special">></span>
<span class="keyword">typename</span> <span class="identifier">Visitor</span><span class="special">::</span><span class="identifier">result_type</span>
<span class="identifier">apply_visitor</span><span class="special">(</span><span class="identifier">Visitor</span> <span class="special">&</span> visitor<span class="special">,</span> <span class="identifier">Variant</span> <span class="special">&</span> operand<span class="special">)</span><span class="special">;</span>
<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Visitor<span class="special">,</span> <span class="keyword">typename</span> Variant<span class="special">></span>
<span class="keyword">typename</span> <span class="identifier">Visitor</span><span class="special">::</span><span class="identifier">result_type</span>
<span class="identifier">apply_visitor</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Visitor</span> <span class="special">&</span> visitor<span class="special">,</span> <span class="identifier">Variant</span> <span class="special">&</span> operand<span class="special">)</span><span class="special">;</span>
<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> BinaryVisitor<span class="special">,</span> <span class="keyword">typename</span> Variant1<span class="special">,</span> <span class="keyword">typename</span> Variant2<span class="special">></span>
<span class="keyword">typename</span> <span class="identifier">BinaryVisitor</span><span class="special">::</span><span class="identifier">result_type</span>
<span class="identifier">apply_visitor</span><span class="special">(</span><span class="identifier">BinaryVisitor</span> <span class="special">&</span> visitor<span class="special">,</span> <span class="identifier">Variant1</span> <span class="special">&</span> operand1<span class="special">,</span>
<span class="identifier">Variant2</span> <span class="special">&</span> operand2<span class="special">)</span><span class="special">;</span>
<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> BinaryVisitor<span class="special">,</span> <span class="keyword">typename</span> Variant1<span class="special">,</span> <span class="keyword">typename</span> Variant2<span class="special">></span>
<span class="keyword">typename</span> <span class="identifier">BinaryVisitor</span><span class="special">::</span><span class="identifier">result_type</span>
<span class="identifier">apply_visitor</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">BinaryVisitor</span> <span class="special">&</span> visitor<span class="special">,</span> <span class="identifier">Variant1</span> <span class="special">&</span> operand1<span class="special">,</span>
<span class="identifier">Variant2</span> <span class="special">&</span> operand2<span class="special">)</span><span class="special">;</span>
<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> MultiVisitor<span class="special">,</span> <span class="keyword">typename</span> Variant1<span class="special">,</span> <span class="keyword">typename</span> Variant2<span class="special">,</span>
<span class="keyword">typename</span> Variant3<span class="special">></span>
<span class="keyword">typename</span> <span class="identifier">MultiVisitor</span><span class="special">::</span><span class="identifier">result_type</span>
<span class="identifier">apply_visitor</span><span class="special">(</span><span class="identifier">MultiVisitor</span> <span class="special">&</span> visitor<span class="special">,</span> <span class="identifier">Variant1</span> <span class="special">&</span> operand1<span class="special">,</span>
<span class="identifier">Variant2</span> <span class="special">&</span> operand2<span class="special">,</span> <span class="identifier">Variant3</span> <span class="special">&</span> operand3<span class="special">,</span> <span class="special">...</span> other_operands<span class="special">)</span><span class="special">;</span>
<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> MultiVisitor<span class="special">,</span> <span class="keyword">typename</span> Variant1<span class="special">,</span> <span class="keyword">typename</span> Variant2<span class="special">,</span>
<span class="keyword">typename</span> Variant3<span class="special">></span>
<span class="keyword">typename</span> <span class="identifier">MultiVisitor</span><span class="special">::</span><span class="identifier">result_type</span>
<span class="identifier">apply_visitor</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">MultiVisitor</span> <span class="special">&</span> visitor<span class="special">,</span> <span class="identifier">Variant1</span> <span class="special">&</span> operand1<span class="special">,</span>
<span class="identifier">Variant2</span> <span class="special">&</span> operand2<span class="special">,</span> <span class="identifier">Variant3</span> <span class="special">&</span> operand3<span class="special">,</span> <span class="special">...</span> other_operands<span class="special">)</span><span class="special">;</span>
<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Visitor<span class="special">></span>
<a class="link" href="apply_visitor_delayed_t.html" title="Class template apply_visitor_delayed_t">apply_visitor_delayed_t</a><span class="special"><</span><span class="identifier">Visitor</span><span class="special">></span> <span class="identifier">apply_visitor</span><span class="special">(</span><span class="identifier">Visitor</span> <span class="special">&</span> visitor<span class="special">)</span><span class="special">;</span></pre></div>
<div class="refsect1">
<a name="idp250407688"></a><h2>Description</h2>
<p>The behavior of <code class="computeroutput">apply_visitor</code> is dependent on
the number of arguments on which it operates (i.e., other than the
visitor). The function behaves as follows:
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">Overloads accepting one operand invoke the unary function
call operator of the given visitor on the content of the given
<code class="computeroutput"><a class="link" href="variant.html" title="Class template variant">variant</a></code> operand.</li>
<li class="listitem">Overloads accepting two operands invoke the binary
function call operator of the given visitor on the content of
the given <code class="computeroutput"><a class="link" href="variant.html" title="Class template variant">variant</a></code>
operands.</li>
<li class="listitem">Overloads accepting three or more operands invoke the
function call operator of the given visitor on the content of
the given <code class="computeroutput"><a class="link" href="variant.html" title="Class template variant">variant</a></code>
operands. Maximum amount of parameters controlled by
<code class="computeroutput"><span class="bold"><strong><a class="link" href="../BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS.html" title="Macro BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS">BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS</a></strong></span></code>
macro. Those functions are actually defined in <a class="xref" href="../variant/reference.html#header.boost.variant.multivisitors_hpp" title="Header <boost/variant/multivisitors.hpp>">the section called “Header <boost/variant/multivisitors.hpp>”</a>.</li>
<li class="listitem">The overload accepting only a visitor returns a
<code class="computeroutput"><a class="link" href="apply_visitor_delayed_t.html" title="Class template apply_visitor_delayed_t">generic function object</a></code>
that accepts either one or two arguments and invokes
<code class="computeroutput"><a class="link" href="apply_visitor.html" title="Function apply_visitor">apply_visitor</a></code> using
these arguments and <code class="computeroutput">visitor</code>, thus behaving as
specified above. (This behavior is particularly useful, for
example, when one needs to operate on each element of a sequence
of variant objects using a standard library
algorithm.)</li>
</ul></div>
</p>
<div class="variablelist"><table border="0" class="variablelist compact">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term">Returns:</span></p></td>
<td>The overloads acccepting operands return the result of
applying the given visitor to the content of the given operands.
The overload accepting only a visitor return a function object, thus
delaying application of the visitor to any operands.</td>
</tr>
<tr>
<td><p><span class="term">Requires:</span></p></td>
<td>The given visitor must fulfill the
<a class="link" href="../variant/reference.html#variant.concepts.static-visitor" title="StaticVisitor"><span class="emphasis"><em>StaticVisitor</em></span></a>
concept requirements with respect to each of the bounded types of the
given <code class="computeroutput">variant</code>.</td>
</tr>
<tr>
<td><p><span class="term">Throws:</span></p></td>
<td>The overloads accepting operands throw only if the given
visitor throws when applied. The overload accepting only a visitor
will not throw. (Note, however, that the returned
<a class="link" href="apply_visitor_delayed_t.html" title="Class template apply_visitor_delayed_t">function object</a>
may throw when invoked.)</td>
</tr>
</tbody>
</table></div>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2002, 2003 Eric Friedman, Itay Maman<p>Distributed under the Boost Software License, Version 1.0.
(See accompanying file <code class="filename">LICENSE_1_0.txt</code> or copy at
<a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="apply_visitor_delayed_t.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../variant/reference.html#header.boost.variant.apply_visitor_hpp"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
|