Namespaces
Variants

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

From cppreference.net
Определено в заголовке <experimental/type_traits>
template < class >

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

template < class Fn, class ... ArgTypes >

struct raw_invocation_type < Fn ( ArgTypes... ) > ;
(1) (техническая спецификация библиотеки fundamentals)
template < class >

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

template < class Fn, class ... ArgTypes >

struct invocation_type < Fn ( ArgTypes... ) > ;
(2) (техническая спецификация библиотеки fundamentals)

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

Параметры вызова выражения INVOKE ( f, t1, t2, ..., tN ) определяются следующим образом, где T1 — это (возможно, cv-квалифицированный) тип t1 , а U1 — это T1& , если t1 является lvalue, и 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 > ( ) является rvalue и Ti в противном случае.

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

Вспомогательные типы

template < class T >
using raw_invocation_type_t = typename raw_invocation_type < T > :: type ;
(техническая спецификация библиотеки fundamentals)
template < class T >
using invocation_type_t = typename invocation_type < T > :: type ;
(техническая спецификация библиотеки fundamentals)

Пример

Смотрите также

C++ documentation для Reflection TS