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

Annex: No Variadic Macros

Boost , Chapter 1. Boost.ScopeExit 1.1.0 , Chapter 1. Boost.ScopeExit 1.1.0

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

В этом разделе представлен альтернативный синтаксис для компиляторов без вариадной макроподдержки.

Sequence Syntax

Большинство современных компиляторов поддерживают вариадные макросы (в частности, это GCC, MSVC и все компиляторы C++11).Однако в редких случаях, когда программистам необходимо использовать эту библиотеку на комплиере без макросов variaidc, эта библиотека также позволяет указать список захвата с помощьюBoost. препроцессорпоследовательность, где токены разделены круглыми скобками<()>:

(capture1) (capture2) ... // All compilers.

Вместо разделённого на запятую списка, который мы видели до сих пор и который требует вариадных макросов:

capture1, capture2, ... // Only compilers with variadic macros.

Например, следующий синтаксис принимается на всех компиляторах с вариадными макросами и без них (см. также<world_seq.cpp>и).<world.cpp>:

Boost.Preprocessor Sequence (Все составители)

Comma-Separated List (только макро)

<
voidworld::add_person(personconst&a_person){
   boolcommit=false;
   persons_.push_back(a_person);         // (1) direct action
   // Following block is executed when the enclosing scope exits.
   BOOST_SCOPE_EXIT((&commit)(&persons_)){
       if(!commit)persons_.pop_back();  // (2) rollback action
   }BOOST_SCOPE_EXIT_END
   // ...                                  // (3) other operations
   commit=true;                        // (4) disable rollback actions
}
>

<
voidworld::add_person(personconst&a_person){
   boolcommit=false;
   persons_.push_back(a_person);         // (1) direct action
   // Following block is executed when the enclosing scope exits.
   BOOST_SCOPE_EXIT(&commit,&persons_){
       if(!commit)persons_.pop_back();  // (2) rollback action
   }BOOST_SCOPE_EXIT_END
   // ...                                  // (3) other operations
   commit=true;                        // (4) disable rollback actions
}
>

Обратите внимание, что одни и те же макросы принимают оба синтаксиса на компиляторах с вариадными макросами и только синтаксис последовательностиBoost.Preprocessorна компиляторах без вариадных макросов. Более старые версии этой библиотеки используются только для поддержки синтаксиса последовательностейBoost.Preprocessor, поэтому этот синтаксис поддерживается также для обратной совместимости. Однако в текущей версии этой библиотеки и на компиляторах с вариадными макросами предпочтителен запятый синтаксис, поскольку он более читаемый.

Наконец, пустой список захвата всегда указывается с использованием<void>на компиляторах с макросами variaidc и без них (см. также<world_void.cpp>):

struct world_t {
    std::vector<person> persons;
    bool commit;
} world; // Global variable.
void add_person(person const& a_person) {
    world.commit = false;
    world.persons.push_back(a_person);
    BOOST_SCOPE_EXIT(void) { // No captures.
        if(!world.commit) world.persons.pop_back();
    } BOOST_SCOPE_EXIT_END
    // ...
    world.commit = true;
}

Examples

Для справки ниже приведен список большинства примеров, представленных в этой документации, перепрограммированной с использованиемBoost. Предпроцессорныйсинтаксис последовательности вместо списков, разделенных запятыми (в алфавитном порядке):



Компилятор C++ не поддерживает вариадные макросы, если для этого компилятора определен макросBoost.Config<BOOST_NO_CXX11_VARIADIC_MACROS>.


PrevUpHomeNext

Статья Annex: No Variadic Macros раздела Chapter 1. Boost.ScopeExit 1.1.0 Chapter 1. Boost.ScopeExit 1.1.0 может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Boost.ScopeExit 1.1.0 ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:17:32/0.0068480968475342/0