![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Phoenix ExpressionsBoost , Chapter 1. Phoenix 3.2.0 , Inside Phoenix
|
выражение |
Семантика |
---|---|
< |
Тип выражения, имеющего тег< |
< |
ABoost.Protogrammar andПрото проходит через трансформацию |
< |
Возвращение выражения Феникса |
![]() |
Note |
---|---|
Возможно, вы заметили аргумент шаблона< |
Определение выражений является только частью игры, чтобы сделать его действительным. Для того чтобы использовать выражения в домене Феникса, нам нужно «зарегистрироваться» их в нашей грамматике.
<meta_grammar
>является основой для этой цели. Это открыто расширяемыйBoost.ProtoГрамматика:
struct meta_grammar : proto::switch_<meta_grammar> { template <typename Tag, typename Dummy> struct case_ : proto::not_<proto::_> {}; };
Как видите, по умолчанию<meta_grammar
>ничего не соответствует. С каждыммодулемэта грамматика расширяется различными выражениями.
Определите выражение:
template <typename Lhs, typename Rhs> struct plus : expr<proto::tag::plus, Lhs, Rhs> {};
Добавьте его к грамматике:
template <> struct meta_grammar::case_<proto::tag::plus> : enable_rule< plus< meta_grammar , meta_grammar > > {};
Определите функцию генератора, чтобы облегчить жизнь наших потенциальных пользователей:
template <typename Lhs, typename Rhs> typename plus<Lhs, Rhs>::type plus(Lhs const & lhs, Rhs const & rhs) { return expression::plus<Lhs, Rhs>::make(lhs, rhs); }
Посмотрите, действительно ли это работает:
plus(6, 5)();
Возвращение 11!
proto::display_expr(plus(5, 6));
отпечатки:
plus( terminal(6) , terminal(5) )
Определить_expression.cppдля полного примера.
![]() |
Note |
---|---|
Пример, показанный здесь, работает только потому, что< |
Статья Phoenix Expressions раздела Chapter 1. Phoenix 3.2.0 Inside Phoenix может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Inside Phoenix ::
реклама |