# std::experimental::ranges::invoke

< 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` 的参数

### 参阅

invoke invoke_r (C++17)(C++23) | 以给定实参和可能指定的返回类型 (C++23 起)调用任意可调用 (Callable) 对象 (函数模板)