std::experimental::ranges::invoke
来自 cppreference.cn
< cpp | experimental | ranges
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 起) (函数模板) |