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

Introspecting an inner function

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_FUNCTION интроспектирует внутреннюю функцию класса. Функция может быть либо функцией члена, либо статической функцией члена.

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

Метафункция может быть вызвана путем передачи ей прилагающего типа для интроспекции и подписи для функции в качестве отдельных аргументов шаблона. Подпись для функции состоит из типа возврата, факультативных типов параметров в виде бустера::mpl передней последовательности типов и факультативного типа тега Boost FunctionTypes. Типичным повышением::mpl передней последовательности типов является повышение::mpl::vector<>.

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

Generating the metafunction

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

BOOST_TTI_HAS_FUNCTION(AnInnerFunction)

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

Invoking the metafunction

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

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

has_function_AnInnerFunction
  <
  Enclosing_Type,
  Function_ReturnType,
  boost::mpl::vector<Function_ParameterTypes>, // optional, can be any mpl forward sequence
  boost::function_types::SomeTagType           // optional, can be any FunctionTypes tag type
  >::value

Examples

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

#include <boost/tti/has_function.hpp>
BOOST_TTI_HAS_FUNCTION(function1)
BOOST_TTI_HAS_FUNCTION(function2)
BOOST_TTI_HAS_FUNCTION(function3)

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

struct AClass { };
struct Top
  {
  static int function1();
  AClass function2(double,short *);
  };
struct Top2
  {
  long function2(Top &,int,bool,short,float);
  static Top * function3(long,int,AClass &);
  };

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

has_function_function1<Top,int>::value; // true
has_function_function1<Top2,int>::value; // false
has_function_function2<Top,AClass,boost::mpl::vector<double,short *> >::value; // true
has_function_function2<Top2,AClass,boost::mpl::vector<double,short *> >::value; // false
has_function_function3<Top2,int>::value; // false
has_function_function3<Top2,Top *,boost::mpl::vector<long,int,AClass &> >::value; // true;

Metafunction re-use

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

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


PrevUpHomeNext

Статья Introspecting an inner function раздела 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 11:36:05/0.006432056427002/0