![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Annex: No Variadic MacrosBoost , Chapter 1. Boost.ScopeExit 1.1.0 , Chapter 1. Boost.ScopeExit 1.1.0
|
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; }
Для справки ниже приведен список большинства примеров, представленных в этой документации, перепрограммированной с использованиемBoost. Предпроцессорныйсинтаксис последовательности вместо списков, разделенных запятыми (в алфавитном порядке):
Файлы |
---|
Компилятор C++ не поддерживает вариадные макросы, если для этого компилятора определен макросBoost.Config<BOOST_NO_CXX11_VARIADIC_MACROS
>.
Статья 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 ::
реклама |