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

Statements

Boost , ,

Statements

Lazy statements

Примитивы и композитные строительные блоки, представленные ранее, достаточно мощны для строительства довольно сложных конструкций и сооружений. Мы представили ленивые функции и ленивых операторов. Как насчет ленивых заявлений? Во-первых, закуска:

Печать всего нечетного содержимого контейнера STL с использованием std::for_each (sample4.cpp):

    for_each(c.begin(), c.end(),
        if_(arg1 % 2 == 1)
        [
            cout << arg1 << ' '
        ]
    );

А? Это действительно C++? Читайте в...

Да, это действительно C++. Приведенный выше примерный код максимально приближен к синтаксису C++. Этот стилизованный синтаксис C++ отличается от реального кода C++. Во-первых, если у него есть выпуклость. Во-вторых, блок использует квадратные скобки вместо привычных кудрявых брекетов.

Вот еще несколько примеров с аннотациями. Код говорит сам за себя.

1 сообщение блока:

    statement,
    statement,
    ....
    statement

В основном это заявления, разделенные запятыми. Обратите внимание, что в отличие от полуколона C/C++, запятая представляет собой разделитель, помещенный между утверждениями. Это похоже на полуколонный сепаратор Паскаля, а не на полуколонный терминатор C/C++. Например:

    statement,
    statement,
    statement,     //  ERROR!

Это ошибка. Последнее утверждение не должно иметь запятой. Блоковые заявления могут быть сгруппированы с использованием скобок. Опять же, последнее заявление в группе не должно иметь запятой.

    statement,
    statement,
    (
        statement,
        statement
    ),
    statement

За пределами квадратных скобок блокировочные заявления должны быть сгруппированы. Например:

    for_each(c.begin(), c.end(),
        (
            do_this(arg1),
            do_that(arg1)
        )
    );

2 if_ statement:

Мы видели заявление if_. Синтаксис это:

    if_(conditional_expression)
    [
        sequenced_statements
    ]

3 if_ else_ statement:

Синтаксис является

    if_(conditional_expression)
    [
        sequenced_statements
    ]
    .else_
    [
        sequenced_statements
    ]

Обратите внимание, что у другого есть префикс точка и следующее подчеркивание: .else_

Пример: Этот код распечатывает все элементы и добавляет " > 5", " == 5" или " < 5" в зависимости от фактического значения элемента:

    for_each(c.begin(), c.end(),
        if_(arg1 > 5)
        [
            cout << arg1 << " > 5\n"
        ]
        .else_
        [
            if_(arg1 == 5)
            [
                cout << arg1 << " == 5\n"
            ]
            .else_
            [
                cout << arg1 << " < 5\n"
            ]
        ]
    );

Обратите внимание, как вложена фраза if_ else.

4 while_ statement:

Синтаксис это:

    while_(conditional_expression)
    [
        sequenced_statements
    ]

Пример: Этот код уменьшает каждый элемент, пока он не достигнет нуля и не распечатает число на каждом шаге. Новая линия завершает распечатку каждого значения.

    for_each(c.begin(), c.end(),
        (
            while_(arg1--)
            [
                cout << arg1 << ", "
            ],
            cout << val("\n")
        )
    );

5) do_ while_ statement:

Синтаксис это:

    do_
    [
        sequenced_statements
    ]
    .while_(conditional_expression)

Опять же, обратите внимание, что в то время как есть префикс точка и следующее подчеркивание: .while_

Пример: Этот код почти такой же, как в предыдущем примере с небольшим поворотом в логике.

    for_each(c.begin(), c.end(),
        (
            do_
            [
                cout << arg1 << ", "
            ]
            .while_(arg1--),
            cout << val("\n")
        )
    );

6 for_ statement:

Синтаксис это:

    for_(init_statement, conditional_expression, step_statement)
    [
        sequenced_statements
    ]

Это снова почти похоже на C++ для утверждения. Обратите внимание, что init_statement, conditional_expression и step_statement разделены запятой вместо полуколонной и каждый должен присутствовать (т.е. для_(,,), является недействительным).

Пример: Этот код печатает каждый элемент N раз, когда N является значением элемента. Новая линия завершает распечатку каждого значения.

    int iii;
    for_each(c.begin(), c.end(),
        (
            for_(var(iii) = 0, var(iii) < arg1, ++var(iii))
            [
                cout << arg1 << ", "
            ],
            cout << val("\n")
        )
    );

Как и прежде, все они лениво оцениваются. Результатом таких утверждений являются композиты, которые передаются в STL для каждой функции. С точки зрения для каждого, то, что было передано, является просто функтором, не больше, не меньше.

Unlike lazy functions and lazy operators, lazy statements always return void.


Статья Statements раздела может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-23 20:28:52/0.0068402290344238/0