Template Struct SchemaImpl::VisitorWrapper

Nested Relationships

This struct is a nested type of Class SchemaImpl.

Inheritance Relationships

Base Type

  • public boost::static_visitor<>

Struct Documentation

template<typename F>
struct VisitorWrapper : public boost::static_visitor<>

A functor-wrapper used in the implementation of Schema::forEach.

Visitor functors used with Boost.Variant (see the Boost.Variant docs) must inherit from boost::static_visitor<> to declare their return type (void, in this case). By wrapping user-supplied functors with this class, we can hide the fact that we’ve implemented SchemaImpl using Boost.Variant (because they won’t need to inherit from static_visitor themselves.

Public Functions

template<typename T>
void operator()(SchemaItem<T> const &x) const

Call the wrapped function.

void operator()(ItemVariant const &v) const

Invoke the visitation.

The call to boost::apply_visitor will call the appropriate template of operator().

This overload allows a VisitorWrapper to be applied directly on a variant object with function-call syntax, allowing us to use it on our vector of variants with std::for_each and other STL algorithms.

template<typename T>
VisitorWrapper(T &&func)

Construct the wrapper.