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 ); |
(范围 TS) | |
使用参数 args 调用 Callable 对象 f,并返回结果,如同使用 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 起) (函数模板) |