std::experimental::ranges::invoke
From cppreference.com
< cpp | experimental | ranges
| Defined in header <experimental/ranges/functional> |
||
| template< class F, class... Args > std::result_of_t<F&&(Args&&...)> invoke( F&& f, Args&&... args ); |
(ranges TS) | |
Callableオブジェクト f をパラメータ args で呼び出し、結果を返します。これは、return INVOKE(std::forward<F>(f), std::forward<Args>(args)...); と同等です。ここで、INVOKE(f, t1, t2, ..., tN) は次のように定義されます。
- もし f がクラス
Tのメンバ関数へのポインタである場合
- もし std::is_base_of<T, std::decay_t<decltype(t1)>>::value が true であれば、 INVOKE(f, t1, t2, ..., tN) は (t1.*f)(t2, ..., tN) と同等です。
- そうでなければ、 INVOKE(f, t1, t2, ..., tN) は ((t1).*f)(t2, ..., tN) と同等です。
- そうでなければ、 N == 1 であり、かつ f がクラス
Tのデータメンバへのポインタである場合
- もし std::is_base_of<T, std::decay_t<decltype(t1)>>::value が true であれば、 INVOKE(f, t1) は t1.*f と同等です。
- そうでなければ、 INVOKE(f, t1) は (*t1).*f と同等です。
- そうでなければ、 INVOKE(f, t1, t2, ..., tN) は f(t1, t2, ..., tN) と同等です(つまり、 f は FunctionObject です)。
[編集] パラメータ
| f | - | 呼び出される Callable オブジェクト |
| args | - | f に渡す引数 |
[編集] 関連項目
| (C++17)(C++23) |
任意の呼び出し可能 (Callable)オブジェクトを所与の引数で呼び出す (戻り値の型を指定することも可能)(C++23以降) (関数テンプレート) |