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

Annex: No Variadic Macros

Boost , Chapter 1. Boost.LocalFunction 1.0.0 , Chapter 1. Boost.LocalFunction 1.0.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). Однако в том редком случае, когда программистам необходимо использовать эту библиотеку на компиляторе без вариадных макросов, эта библиотека также позволяет задать свои макропараметры с помощьюBoost. препроцессорпоследовательность, где токены разделены круглыми скобками<()>:

(token1) (token2) ... // All compilers.

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

token1, token2, ... // Only compilers with varidic macros.

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

int main(void) {
    int sum = 0, factor = 10;
    void BOOST_LOCAL_FUNCTION( (const bind factor) (bind& sum) (int num) ) {
        sum += factor * num;
    } BOOST_LOCAL_FUNCTION_NAME(add)
    add(1);
    int nums[] = {2, 3};
    std::for_each(nums, nums + 2, add);
    BOOST_TEST(sum == 60);
    return boost::report_errors();
}

Однако на компиляторах с вариадными макросами синтаксис, разделенный запятой, который мы видели до сих пор, предпочтительнее, потому что более читаемый (см. также<add.cpp>):

int main(void) {                            // Some local scope.
    int sum = 0, factor = 10;               // Variables in scope to bind.
    void BOOST_LOCAL_FUNCTION(const bind factor, bind& sum, int num) {
        sum += factor * num;
    } BOOST_LOCAL_FUNCTION_NAME(add)
    add(1);                                 // Call the local function.
    int nums[] = {2, 3};
    std::for_each(nums, nums + 2, add);     // Pass it to an algorithm.
    BOOST_TEST(sum == 60);                  // Assert final summation value.
    return boost::report_errors();
}

Обратите внимание, что одни и те же макросы принимают оба синтаксиса на компиляторах с вариадными макросами и только синтаксис последовательности на компиляторах без вариадных макросов. Наконец, пустой список локальных параметров функций всегда указывается с помощью<void>на компиляторах с вариадными макросами и без них:

int BOOST_LOCAL_FUNCTION(void) { // No parameter.
    return 10;
} BOOST_LOCAL_FUNCTION_NAME(ten)
BOOST_TEST(ten() == 10);

Examples

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


PrevUpHomeNext

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




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



:: Главная :: Chapter 1. Boost.LocalFunction 1.0.0 ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 03:41:36/0.0059230327606201/1