17#ifndef OASIS_MATCHCAST_HPP
18#define OASIS_MATCHCAST_HPP
20#include <boost/mpl/for_each.hpp>
21#include <boost/mpl/push_back.hpp>
22#include <boost/mpl/vector.hpp>
31template <
typename Ret,
typename ClassType,
typename Arg>
36template <
typename Lambda>
39template <
typename ArgumentT,
typename Cases>
42 template <
typename Lambda>
48 boost::mpl::for_each<Cases>([&]<
typename CaseTrueCallbackT>(CaseTrueCallbackT caseTrueCallback) {
53 result = caseTrueCallback(*castResult);
55 return result ? std::move(result) : std::move(fallback);
59template <
typename ArgumentT>
Definition MatchCast.hpp:40
auto Execute(const ArgumentT &arg, std::unique_ptr< ArgumentT > &&fallback) const -> std::unique_ptr< ArgumentT >
Definition MatchCast.hpp:45
auto Case(Lambda) const -> MatchCastImpl< ArgumentT, typename boost::mpl::push_back< Cases, Lambda >::type >
Definition MatchCast.hpp:43
typename lambda_traits< decltype(&Lambda::operator())>::argument_type lambda_argument_type
Definition MatchCast.hpp:37
Definition MatchCast.hpp:29