Struct template when<Grammar, R(A..., ...)>
boost::proto::when<Grammar, R(A..., ...)> — A grammar element and a Transform that associates a
transform with the grammar.
Synopsis
template<typename Grammar, typename R, typename... A>
struct when<Grammar, R(A..., ...)> : proto::transform< when<Grammar, R(A..., ...)> > {
typedef typename Grammar::proto_grammar proto_grammar;
template<typename Expr, typename State, typename Data>
struct impl : proto::transform_impl< Expr, State, Data > {
typedef proto::call<R(A..., ...)> call_;
typedef proto::make<R(A..., ...)> make_;
typedef typename mpl::if_<proto::is_callable<R>,call_,make_>::type which;
typedef typename boost::result_of<which(Expr, State, Data)>::type result_type;
result_type operator()(typename impl::expr_param,
typename impl::state_param,
typename impl::data_param) const;
};
};
Description
Используйтеproto:: when<>
, чтобы переопределить преобразование по умолчанию грамматики с пользовательским преобразованием. Он предназначен для использования при составлении больших преобразований, связывая меньшие преобразования с индивидуальными правилами в вашей грамматике.
When
форма принимает либоCallableTransformилиObjectTransformв качестве второго параметра.proto:: when<>
используетproto::is_callable::value
различать их и использоватьproto::call<>
для оценкиТрансформацияиproto::make<>
для оценкиТрансформация объектовс.
Примечание:В специализацииwhen
первый эллипсис обозначает вариадный шаблон в стиле C++11 (который эмулируется для компиляторов C++98). Второй эллипсис — это варарг в стиле С.