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

Index modifiers

Boost , Chapter 1. The Variadic Macro Data Library 1.9 , Macros with modifiers

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

Модификаторы индексов могут использоваться с макросом BOOST_VMD_ELEM при использовании модификаторов идентификаторов. Модификаторы индексов принимают два значения:

  • BOOST_VMD_RETURN_INDEX возвращает индекс в виде числа, начиная с 0, конкретного модификатора идентификатора, который соответствует, как часть вывода макроса BOOST_VMD_ELEM. Если какой-либо конкретный модификатор идентификатора не совпадает, возвращайте пустоту как часть вывода. Номер индекса определяется исключительно порядком, в котором модификаторы идентификаторов указаны в качестве дополнительных параметров для BOOST_VMD_ELEM, будь то отдельно в качестве отдельных дополнительных параметров или в качестве набора модификаторов идентификаторов.
  • BOOST_VMD_RETURN_NO_INDEX, не возвращайте индекс как часть вывода. Это значение по умолчанию и должно использоваться только для переопределения значения BOOST_VMD_RETURN_INDEX, если оно указано.

BOOST_VMD_RETURN_INDEX сообщает программисту, какой из модификаторов идентификатора сопоставил данные элемента с индексом. Некоторые макропрограммисты находят это более полезным для целей логики макроразветвления, чем разветвление с использованием фактического имени самого идентификатора.

При указании модификатора индекса BOOST_VMD_RETURN_INDEX и модификатора идентификатора вместе с модификатором фильтра BOOST_VMD_TYPE_IDENTIFIER выход BOOST_VMD_ELEM становится набором из двух элементов. Первый элемент кортежа - это соответствующий элемент, а последний элемент кортежа - это индекс, начинающийся с 0, соответствующего модификатора идентификатора. Если элемент не совпадает, оба элемента кортежа пусты.

Если также указан модификатор расщепления BOOST_VMD_RETURN_AFTER, то на выходе получается набор из трех элементов. Первый элемент кортежа — это соответствующий элемент, второй элемент кортежа — остальная часть последовательности после соответствующего элемента, а последний элемент кортежа — числовой индекс. Если элемент не совпадает, то все три элемента кортежа пусты.

Если модификаторы идентификаторов и модификатор фильтра BOOST_VMD_TYPE_IDENTIFIER не указаны в качестве дополнительных параметров, то при указании BOOST_VMD_RETURN_INDEX он игнорируется. Если модификатор разделения BOOST_VMD_RETURN_ONLY_AFTER указан, он также игнорируется.

Давайте посмотрим, как это работает:

#include <boost/vmd/elem.hpp>
#define BOOST_VMD_REGISTER_ANAME (ANAME)
#define BOOST_VMD_REGISTER_APLACE (APLACE)
#define BOOST_VMD_REGISTER_ACOUNTRY (ACOUNTRY)
#define BOOST_VMD_DETECT_ANAME_ANAME
#define BOOST_VMD_DETECT_APLACE_APLACE
#define A_SEQUENCE (1,2,3) ANAME (1)(2) 46
BOOST_VMD_ELEM(1,A_SEQUENCE,BOOST_VMD_TYPE_IDENTIFIER) will return 'ANAME'
BOOST_VMD_ELEM(1,A_SEQUENCE,BOOST_VMD_TYPE_IDENTIFIER,APLACE,ACOUNTRY) will return emptiness
BOOST_VMD_ELEM(1,A_SEQUENCE,BOOST_VMD_TYPE_IDENTIFIER,BOOST_VMD_RETURN_INDEX,APLACE,ACOUNTRY) will return (,)
BOOST_VMD_ELEM(1,A_SEQUENCE,BOOST_VMD_TYPE_IDENTIFIER,BOOST_VMD_RETURN_INDEX,ANAME,APLACE,ACOUNTRY) will return '(ANAME,0)'
BOOST_VMD_ELEM(1,A_SEQUENCE,BOOST_VMD_TYPE_IDENTIFIER,BOOST_VMD_RETURN_INDEX,(APLACE,ACOUNTRY,ANAME)) will return '(ANAME,2)'

Используется с разделительными модификаторами:

#include <boost/vmd/elem.hpp>
BOOST_VMD_ELEM(1,A_SEQUENCE,BOOST_VMD_TYPE_IDENTIFIER,BOOST_VMD_RETURN_INDEX,APLACE,ACOUNTRY,BOOST_VMD_RETURN_AFTER) will return (,,)
BOOST_VMD_ELEM(1,A_SEQUENCE,BOOST_VMD_TYPE_IDENTIFIER,BOOST_VMD_RETURN_INDEX,ANAME,APLACE,ACOUNTRY,BOOST_VMD_RETURN_AFTER) will return '(ANAME,(1)(2) 46,0)'
BOOST_VMD_ELEM(1,A_SEQUENCE,BOOST_VMD_TYPE_IDENTIFIER,BOOST_VMD_RETURN_INDEX,(APLACE,ACOUNTRY,ANAME),BOOST_VMD_RETURN_AFTER) will return '(ANAME,(1)(2) 46,2)'
BOOST_VMD_ELEM(1,A_SEQUENCE,BOOST_VMD_TYPE_IDENTIFIER,BOOST_VMD_RETURN_INDEX,(APLACE,ACOUNTRY,ANAME),BOOST_VMD_RETURN_ONLY_AFTER) will return '(1)(2) 46'

PrevUpHomeNext

Статья Index modifiers раздела Chapter 1. The Variadic Macro Data Library 1.9 Macros with modifiers может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Macros with modifiers ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:24:30/0.0084998607635498/1