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