...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
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.
// In header: <boost/variant/apply_visitor.hpp> template<typename Visitor, typename Variant> typename Visitor::result_type apply_visitor(Visitor & visitor, Variant&& operand); template<typename Visitor, typename Variant> typename Visitor::result_type apply_visitor(const Visitor & visitor, Variant&& operand); template<typename BinaryVisitor, typename Variant1, typename Variant2> typename BinaryVisitor::result_type OR decltype(auto) apply_visitor(BinaryVisitor & visitor, Variant1&& operand1, Variant2&& operand2); template<typename BinaryVisitor, typename Variant1, typename Variant2> typename BinaryVisitor::result_type OR decltype(auto) apply_visitor(const BinaryVisitor & visitor, Variant1&& operand1, Variant2&& operand2); template<typename MultiVisitor, typename Variant1, typename Variant2, typename Variant3> typename MultiVisitor::result_type OR decltype(auto) apply_visitor(MultiVisitor & visitor, Variant1&& operand1, Variant2&& operand2, Variant3&& operand3, ... other_operands); template<typename MultiVisitor, typename Variant1, typename Variant2, typename Variant3> typename MultiVisitor::result_type OR decltype(auto) apply_visitor(const MultiVisitor & visitor, Variant1&& operand1, Variant2&& operand2, Variant3&& operand3, ... other_operands); template<typename Visitor> apply_visitor_delayed_t<Visitor> apply_visitor(Visitor & visitor); template<typename Visitor> apply_visitor_delayed_cpp14_t<Visitor> apply_visitor(Visitor & visitor);
The behavior of apply_visitor
is dependent on
the number of arguments on which it operates (i.e., other than the
visitor). If your compiler does not support the rvalue references or reference qualifiers then all the
forwarding references from above degrade to non const lvalue reference. The function behaves as follows:
variant
operand.variant
operands.variant
operands. Maximum amount of parameters controlled by
BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS
macro. Those functions are actually defined in a header boost/variant/multivisitors.hpp
(See the section called “Header <boost/variant/multivisitors.hpp>”). That header must be manually included
if multi visitors are meant for use.C++03 compatible generic function object
or
C++14 compatible generic function object
that accepts either one, two or arbitrary count of arguments and invoke
apply_visitor
using
these arguments and visitor
, 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.)Returns: |
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. |
Requires: |
The given visitor must fulfill the
StaticVisitor
concept requirements with respect to each of the bounded types of the
given variant . |
Throws: |
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 function object may throw when invoked.) |