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

Introspecting member data

Boost , Chapter 1. The Type Traits Introspection Library , Chapter 1. The Type Traits Introspection Library

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

TTI макрос<BOOST_TTI_HAS_MEMBER_DATA>интроспектирует данные членов класса.

BOOST_TTI_HAS_MEMBER_DATA макрос берет один параметр, который является именем данных внутреннего члена, существование которого программист хочет проверить. Макро генерирует метафункцию, называемую «has_member_data_name_of_inner_member_data».

Метафункция может быть вызвана двумя различными способами.

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

Второй способ — передать ему один параметр, который является указателем на тип члена. Этот тип имеет форму:

MemberData_Type Enclosing_Type::*

Метафункция возвращает один тип, называемый «тип», который является импульсом::mpl::bool_. В качестве удобства метафункция возвращает значение этого типа непосредственно в виде константы времени компиляции, называемой «значением». Это значение является истинным или ложным в зависимости от того, существуют или нет данные о внутреннем элементе определенного типа.

Generating the metafunction

Вы генерируете метафункцию, ссылаясь на макрос с именем данных внутреннего члена:

BOOST_TTI_HAS_MEMBER_DATA(AMemberData)

генерирует метафункцию под названием «has_member_data_AMemberData» в текущем объеме.

Invoking the metafunction

Вы вызываете метафункцию, инстанцируя шаблон с прилагающимся типом для интроспектирования и типом данных участника или инстанцируя шаблон с указателем на тип данных участника. Возвратное значение, называемое «значение», представляет собой константу времени компиляции, сообщающую вам, существуют ли данные участника.

has_member_data_AMemberData<Enclosing_Type,MemberData_Type>::value
OR
has_member_data_AMemberData<MemberData_Type Enclosing_Type::*>::value

Examples

Сначала мы генерируем метафункции для различных имен данных внутренних членов:

#include <boost/tti/has_member_data.hpp>
BOOST_TTI_HAS_MEMBER_DATA(data1)
BOOST_TTI_HAS_MEMBER_DATA(data2)
BOOST_TTI_HAS_MEMBER_DATA(data3)

Давайте создадим некоторые пользовательские типы, которые мы хотим интроспектировать.

struct AClass
  {
  };
struct Top
  {
  int data1;
  AClass * data2;
  };
struct Top2
  {
  long data1;
  Top data3;
  };

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

Мы покажем обе формы в следующих примерах. Обе формы полностью взаимозаменяемы по желаемому результату.

has_member_data_data1<Top,int>::value; // true
has_member_data_data1<Top,long>::value; // false
has_member_data_data1<Top2,int>::value; // false
has_member_data_data1<long Top2::*>::value; // true
has_member_data_data2<AClass * Top::*>::value; // true
has_member_data_data2<Top,int *>::value; // false
has_member_data_data3<int Top2::*>::value; // false
has_member_data_data3<Top Top2::*>::value; // true;

Metafunction re-use

Макрокодирует только имя данных участников, для которых мы ищем, и тот факт, что мы интроспектируем данные участников в закрытом типе.

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


PrevUpHomeNext

Статья Introspecting member data раздела Chapter 1. The Type Traits Introspection Library Chapter 1. The Type Traits Introspection Library может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. The Type Traits Introspection Library ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 09:04:19/0.0062928199768066/0