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