名稱空間
變體
操作

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

來自 cppreference.com
< cpp‎ | 實驗性
 
 
實驗性
技術規範
檔案系統庫 (檔案系統 TS)
庫基礎 (庫基礎 TS)
庫基礎 2 (庫基礎 TS v2)
庫基礎 3 (庫基礎 TS v3)
並行性擴充套件 (並行性 TS)
並行性擴充套件 2 (並行性 TS v2)
併發性擴充套件 (併發性 TS)
併發擴充套件 2 (併發 TS v2)
概念 (概念 TS)
範圍 (範圍 TS)
反射 (反射 TS)
數學特殊函式 (特殊函式 TR)
實驗性非 TS
模式匹配
線性代數
std::execution
契約
2D 圖形
 
 
定義於標頭檔案 <experimental/type_traits>
template< class >

struct raw_invocation_type; //未定義

template< class Fn, class... ArgTypes >

struct raw_invocation_type<Fn(ArgTypes...)>;
(1) (庫基礎 TS)
template< class >

struct invocation_type; //未定義

template< class Fn, class... ArgTypes >

struct invocation_type<Fn(ArgTypes...)>;
(2) (庫基礎 TS)

計算當 Fn 與引數 ArgTypes... 一起呼叫時的*呼叫引數*,如 INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...),其中 INVOKE 是在 Callable 中定義的操作。

表示式 INVOKE(f, t1, t2, ..., tN) 的*呼叫引數*定義如下,其中 T1t1 的(可能是 cv-限定的)型別,如果 t1 是左值,則 U1T1&,否則是 T1&&

  • 如果 f 是類 T 的成員函式指標,則呼叫引數為 U1,後跟由 t2, ..., tN 匹配的 f 的引數。
  • 如果 N == 1f 是類 T 的成員資料指標,則呼叫引數為 U1
  • 如果 f 是類型別物件,則呼叫引數是在 f 的函式呼叫運算子和代理呼叫函式中,與引數 t1, ..., tN 匹配的最佳可行函式的引數。
  • 在所有其他情況下,呼叫引數是 f 的引數中與 t1, ..., tN 匹配的引數。

如果引數 tI 與函式引數列表中的省略號匹配,則相應的呼叫引數是對 tI 應用預設引數提升的結果。

FnArgTypes 中的所有型別可以是任何完整型別、未知邊界陣列或(可能是 cv-限定的)void

目錄

[編輯] 成員型別

成員型別 定義
raw_invocation_type<Fn(ArgTypes...)>::type R(T1, T2, ...),其中

僅當 Fn 可以在未求值上下文中與引數 ArgTypes... 一起呼叫時才定義。

invocation_type<Fn(ArgTypes...)>::type R(U1, U2, ...),其中

僅當 Fn 可以在未求值上下文中與引數 ArgTypes... 一起呼叫時才定義。

[編輯] 輔助型別

template< class T >
using raw_invocation_type_t = typename raw_invocation_type<T>::type;
(庫基礎 TS)
template< class T >
using invocation_type_t = typename invocation_type<T>::type;
(庫基礎 TS)

[編輯] 示例

[編輯] 另請參閱

C++ 文件,關於 反射 TS