std::experimental::invocation_type, std::experimental::raw_invocation_type
Определено в заголовочном файле <experimental/type_traits>
|
||
template<class> struct raw_invocation_type; //не определено |
(1) | (ТС основ библиотеки) |
template<class> struct invocation_type; //не определено |
(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, ...), где:
Определяется только в том случае, если |
invocation_type<Fn(ArgTypes...)>::type | R(U1, U2, ...), где
Определяется только в том случае, если |
[править] Вспомогательные типы
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++ по ТС Рефлексии
|