std::experimental::ranges::invoke
來自 cppreference.com
< cpp | experimental | ranges
定義於標頭檔案 <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 起) (函式模板) |