名前空間
変種
操作

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

From cppreference.com
 
 
 
 
ヘッダ <experimental/type_traits> で定義
template< class >

struct raw_invocation_type; //未定義

template< class Fn, class... ArgTypes >

struct raw_invocation_type<Fn(ArgTypes...)>;
(1) (Library Fundamentals TS)
template< class >

struct invocation_type; //未定義

template< class Fn, class... ArgTypes >

struct invocation_type<Fn(ArgTypes...)>;
(2) (Library Fundamentals TS)

Callableで定義されている操作INVOKEを用いて、INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...)のようにFnが引数ArgTypes...で呼び出されたときの呼び出しパラメータ (invocation parameters) を計算する。

INVOKE(f, t1, t2, ..., tN)呼び出しパラメータは以下のように定義される。ここで、T1t1 の型 (cv修飾されている可能性がある) であり、U1t1 が左辺値であれば T1&、そうでなければ T1&& である。

  • f がクラス T のメンバ関数へのポインタである場合、呼び出しパラメータは U1 に続き、t2, ..., tN にマッチする f のパラメータである。
  • N == 1 かつ f がクラス T のメンバデータへのポインタである場合、呼び出しパラメータは U1 である。
  • f がクラス型のオブジェクトである場合、呼び出しパラメータは、f の関数呼び出し演算子と代理呼び出し関数 (surrogate call functions) の中で、引数 t1, ..., tN に対する最適な有効関数にマッチするパラメータである。
  • それ以外のすべての場合において、呼び出しパラメータは t1, ..., tN にマッチする f のパラメータである。

引数 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, ...)、ここで
  • Rstd::result_of_t<Fn(ArgTypes...)> である。
  • T1, T2, ... は、上で定義された INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...)呼び出しパラメータである。
  • A1, A2, ...ArgTypes... を表す。
  • Ui は、std::declval<Ai>() が右辺値であれば std::decay_t<Ai> であり、そうでなければ Ti である。

Fnが引数ArgTypes...で評価されないコンテキストで呼び出し可能な場合にのみ定義される。

[編集] ヘルパー型

template< class T >
using raw_invocation_type_t = typename raw_invocation_type<T>::type;
(Library Fundamentals TS)
template< class T >
using invocation_type_t = typename invocation_type<T>::type;
(Library Fundamentals TS)

[編集]

[編集] 関連項目

C++ documentation for Reflection TS
English 日本語 中文(简体) 中文(繁體)