Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Phoenix Expressions

Boost , Chapter 1. Phoenix 3.2.0 , Inside Phoenix

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Феникс-экспрессия является модельюПрото-экспрессии.Концепция. Эти выражения обернуты в шаблонАктера.<actor>предоставляет оператор вызова функции, который оценивает выражения.<actor>является доменной оберткой вокруг выражений Феникса.

По замыслу Phoenix Expressions не несут никакой информации о том, как они будут оцениваться позже. Это структура данных, на которой будет работать<Actions>.

Библиотека предоставляет удобный шаблон для определения выражений:

template <template <typename> Actor, typename Tag, typename A0, ..., typename A1>
struct expr_ext
    : proto::transform<expr_ext<Actor, Tag, A0, ..., A1> >
{
    typedef unspecified base_expr;
    typedef Actor<base_expr> type;
    typedef unspecified proto_grammar;
    static type make(A0 a0, ..., A1 a1);
};
template <typename Tag, typename A0, ..., typename A1>
struct expr : expr_ext<actor, Tag, A0, ..., A1> {};

Запись

A0...AN

Типы детских узлов

a0...aN

Объекты детских узлов

G0...GN

Усиление.ПротоТипы грамматики

Семантика выражения

выражение

Семантика

<expr<Tag, A0...AN>::type>

Тип выражения, имеющего тег<Tag>и<A0...AN>детей

<expr<Tag, G0...GN>>

ABoost.Protogrammar andПрото проходит через трансформацию

<expr<Tag, A0...AN>::make(a0...aN)>

Возвращение выражения Феникса

[Note] Note

Возможно, вы заметили аргумент шаблона<Actor>, используемый в<expr_ext>. Это может быть пользователь, снабженный пользовательским актором, добавляющим другие функции или объекты участника, чем шаблон по умолчанию<actor>.Продление актеровдля более подробной информации.

meta_grammar

Определение выражений является только частью игры, чтобы сделать его действительным. Для того чтобы использовать выражения в домене Феникса, нам нужно «зарегистрироваться» их в нашей грамматике.

<meta_grammar>является основой для этой цели. Это открыто расширяемыйBoost.ProtoГрамматика:

struct meta_grammar
    : proto::switch_<meta_grammar>
{
    template <typename Tag, typename Dummy>
    struct case_
        : proto::not_<proto::_>
    {};
};

Как видите, по умолчанию<meta_grammar>ничего не соответствует. С каждыммодулемэта грамматика расширяется различными выражениями.

Example

Определите выражение:

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] Note

Пример, показанный здесь, работает только потому, что<default_actions>знает, как обращаться с выражением, имеющим<proto::tag::plus>и двух детей. Это связано с тем, что<default_actions>использует преобразование<proto::_default<meta_grammar>>для оценки операторов и функций. Узнайте больше о действияхздесь.


PrevUpHomeNext

Статья Phoenix Expressions раздела Chapter 1. Phoenix 3.2.0 Inside Phoenix может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Inside Phoenix ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 07:40:11/0.0065128803253174/0