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

Introspecting static 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_STATIC_MEMBER_DATA>интроспектирует статические данные о членах класса.

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

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

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

Generating the metafunction

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

BOOST_TTI_HAS_STATIC_MEMBER_DATA(AStaticMemberData)

генерирует метафункцию, называемую «has_static_member_data_AStaticMemberData» в текущем объеме.

Invoking the metafunction

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

has_static_member_data_AStaticMemberData<Enclosing_Type,StaticMemberData_Type>::value

Examples

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

#include <boost/tti/has_static_member_data.hpp>
BOOST_TTI_HAS_STATIC_MEMBER_DATA(data1)
BOOST_TTI_HAS_STATIC_MEMBER_DATA(data2)
BOOST_TTI_HAS_STATIC_MEMBER_DATA(data3)

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

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

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

has_static_member_data_data1<Top,int>::value; // true
has_static_member_data_data1<Top,long>::value; // false
has_static_member_data_data1<Top2,int>::value; // false
has_static_member_data_data1<Top2,long>::value; // true
has_static_member_data_data2<Top,AClass *>::value; // true
has_static_member_data_data2<Top,int *>::value; // false
has_static_member_data_data3<Top2,int>::value; // false
has_static_member_data_data3<Top2,Top>::value; // true;

Metafunction re-use

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

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


PrevUpHomeNext

Статья Introspecting static 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 04:08:55/0.0039098262786865/0