Пространства имён
Варианты
Действия

std::experimental::invocation_type, std::experimental::raw_invocation_type

Материал из cppreference.com
 
 
Технические спецификации
Библиотека файловой системы (ТС файловой системы)
Основы библиотеки (ТС основ библиотеки)
Основы библиотеки 2 (ТС основ библиотеки v2)
Основы библиотеки 3 (ТС основы библиотеки v3)
Расширения для параллелизма (ТС параллелизма)
Расширения для параллелизма 2 (ТС параллелизма v2)
Расширения для конкуренции 2 (ТС конкуренции v2)
Концепты (ТС концепций)
Диапазоны (ТС диапазонов)
Рефлексия (ТС рефлексии)
Специальные математические функции (ТО специальные функции)
 
 
Определено в заголовочном файле <experimental/type_traits>
template<class>

struct raw_invocation_type; //не определено

template<class Fn, class... ArgTypes>

struct raw_invocation_type<Fn(ArgTypes...)>;
(1) (ТС основ библиотеки)
template<class>

struct invocation_type; //не определено

template<class Fn, class... ArgTypes>

struct invocation_type<Fn(ArgTypes...)>;
(2) (ТС основ библиотеки)

Вычисляет параметры вызова, когда Fn вызывается с аргументами ArgTypes..., как в INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...), где INVOKE операция, определённая в Callable.

Параметры вызова выражения INVOKE(f, t1, t2, ..., tN) определяются следующим образом, где T1 (возможно, cv-квалифицированный) тип t1 и U1 есть T1&, если t1 левостороннее значение и T1&& в противном случае:

  • Если f является указателем на функцию-элемент класса T, то параметрами вызова является U1, за которыми следуют параметры f соответствующие t2, ..., tN.
  • Если N == 1 и f является указателем на данные-элементы класса T, тогда параметр вызова U1.
  • Если f объект типа класса, тогда параметры вызова это параметры, соответствующие t1, ..., tN наилучше подходящей функции для аргументов t1, ..., tN среди операторов вызова функций и вызовов суррогатных функций f.
  • Во всех остальных случаях параметры вызовов являются параметрами f соответствующие t1, ..., tN.

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

Fn и все типы в ArgTypes могут быть любым полным типом, массивом с неизвестной границей или (возможно, cv-квалифицированным) void.

Содержание

[править] Типы-элементы

Тип-элемент Определение
raw_invocation_type<Fn(ArgTypes...)>::type R(T1, T2, ...), где:

Определяется только в том случае, если Fn можно вызвать с аргументами ArgTypes... в неоценённом контексте.

invocation_type<Fn(ArgTypes...)>::type R(U1, U2, ...), где
  • R это std::result_of_t<Fn(ArgTypes...)>
  • T1, T2, ... это параметры вызова для INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...), как определено выше
  • A1, A2, ... обозначает ArgTypes...
  • Ui это std::decay_t<Ai>, если std::declval<Ai>() является правосторонним значением и Ti иначе.

Определяется только в том случае, если Fn можно вызвать с аргументами ArgTypes... в неоценённом контексте

[править] Вспомогательные типы

template< class T >
using raw_invocation_type_t = typename raw_invocation_type<T>::type;
(ТС основ библиотеки)
template< class T >
using invocation_type_t = typename invocation_type<T>::type;
(ТС основ библиотеки)

[править] Пример

[править] Смотрите также

Документация C++ по ТС Рефлексии