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

Introspecting inner 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_DATA>интроспектирует данные класса. Данные могут быть данными члена или статичными данными члена.

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

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

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

Generating the metafunction

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

BOOST_TTI_HAS_DATA(AData)

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

Invoking the metafunction

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

has_data_AData<Enclosing_Type,Data_Type>::value

Examples

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

#include <boost/tti/has_data.hpp>
BOOST_TTI_HAS_DATA(data1)
BOOST_TTI_HAS_DATA(data2)
BOOST_TTI_HAS_DATA(data3)

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

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

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

has_data_data1<Top,int>::value; // true
has_data_data1<Top,long>::value; // false
has_data_data1<Top2,int>::value; // false
has_data_data1<Top2,long>::value; // true
has_data_data2<Top,AClass *>::value; // true
has_data_data2<Top,int *>::value; // false
has_data_data3<Top2,int>::value; // false
has_data_data3<Top2,Top>::value; // true;

Metafunction re-use

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

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


PrevUpHomeNext

Статья Introspecting inner 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 02:48:46/0.0037109851837158/0