Struct template when<Grammar, proto::external_transform>
boost::proto::when<Grammar, > — A grammar element that associates an externally-specified transform with the grammar.
The transform is looked up in the Data parameter using the Grammar as a key.
Synopsis
template<typename Grammar>
struct when<Grammar, proto::external_transform> :
proto::transform< when<Grammar, proto::external_transform> >
{
typedef typename Grammar::proto_grammar proto_grammar;
template<typename Expr, typename State, typename Data>
struct impl :
boost::remove_reference<
typename mpl::eval_if_c<
proto::result_of::has_env_var<Data, proto::transforms_type>::value,
proto::result_of::env_var<Data, proto::transforms_type>,
proto::result_of::env_var<Data, proto::data_type>
>::type
>::type
::template when< Grammar >
::template impl< Expr, State, Data >
{
};
};
Description
Используйте<proto::when<>
>, чтобы переопределить преобразование грамматики по умолчанию с пользовательским преобразованием. Он предназначен для использования при составлении больших преобразований, связывая меньшие преобразования с индивидуальными правилами в вашей грамматике.
1 указывает на то, что соответствующее преобразование еще не известно. Его следует искать, когда трансформация будет применена. Он обнаруживается, просматривая его в параметре данных, который ведет себя как карта времени компиляции от типов грамматики до типов преобразования. Карта индексируется с использованием<Grammar
>в качестве ключа. Соответствующий тип значения используется в качестве преобразования для применения. Таким образом, одна и та же грамматика может быть использована для определения нескольких стратегий оценки, которые могут быть добавлены после выбора.
См., например,<proto::external_transforms
>.