命名空间
变体
操作

std::experimental::ranges::invoke

来自 cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
实验性
技术规范
文件系统库 (文件系统 TS)
库基础 (库基础 TS)
库基础 2 (库基础 TS v2)
库基础 3 (库基础 TS v3)
并行扩展 (并行 TS)
并行扩展 2 (并行 TS v2)
并发扩展 (并发 TS)
并发扩展 2 (并发 TS v2)
概念 (概念 TS)
范围 (范围 TS)
反射 (反射 TS)
数学特殊函数 (特殊函数 TR)
实验性非 TS
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
通用实用程序库
实用程序组件
函数对象
invoke
元编程和类型特征
标记对和元组
                          
标记说明符
                                      
                          
 
定义在头文件 <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) 定义如下

  • 如果 std::is_base_of<T, std::decay_t<decltype(t1)>>::valuetrue,则 INVOKE(f, t1, t2, ..., tN) 等同于 (t1.*f)(t2, ..., tN)
  • 否则,INVOKE(f, t1, t2, ..., tN) 等同于 ((*t1).*f)(t2, ..., tN).
  • 如果 std::is_base_of<T, std::decay_t<decltype(t1)>>::valuetrue,则 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 起)
(函数模板) [编辑]