C++ 具名要求:可调用(Callable)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

可调用(Callable) 类型是可应用 INVOKEINVOKE<R> 操作(例如用于 std::functionstd::bindstd::thread::thread)的类型。

库函数 std::invoke 可以显式执行 INVOKE 操作。

(C++17 起)

库函数 std::invoke_r 可以显式执行 INVOKE<R> 操作。

(C++23 起)

目录

[编辑]要求

如果满足下列条件,那么类型 T可调用(Callable) 的:

给定

  • T 类型的对象 f
  • 适合的实参类型列表 ArgTypes
  • 适合的返回类型 R

那么下列表达式必须合法:

表达式要求
INVOKE<R>(f, std::declval<ArgTypes>()...) 该表达式在不求值语境中良构

[编辑]注解

数据成员指针可调用(Callable) 的,尽管实际上并不发生函数调用。

[编辑]标准库

此外,下列标准库设施接受任何可调用(Callable) 类型(不仅是函数对象(FunctionObject) ):

(C++11)
任意可复制构造的可调用对象的可复制包装
(类模板)[编辑]
任意可调用对象的仅移动包装,支持给定调用签名中的限定符
(类模板)[编辑]
任意可复制构造的可调用对象的可复制包装,支持给定调用签名中的限定符
(类模板)[编辑]
任意可调用对象的无所有权包装
(类模板)[编辑]
(C++11)
绑定一或多个实参到函数对象
(函数模板)[编辑]
(C++20)(C++23)
按顺序绑定一定数量的实参到函数对象
(函数模板)[编辑]
可复制构造(CopyConstructible) 可复制赋值(CopyAssignable) 的引用包装器
(类模板)[编辑]
(C++11)(C++20 移除)(C++17)
推导以一组实参调用一个可调用对象的结果类型
(类模板)[编辑]
(C++11)
管理单独的线程
(类)[编辑]
(C++20)
支持自动合并和取消的 std::thread
(类)[编辑]
(C++11)
仅调用函数一次,即使从多个线程调用
(函数模板)[编辑]
(C++11)
异步运行一个函数(有可能在新线程中执行),并返回将保有它的结果的 std::future
(函数模板)[编辑]
打包一个函数,存储其返回值以进行异步获取
(类模板)[编辑]

[编辑]参阅

检查类型能否以给定的实参类型调用(如同以 std::invoke
(类模板)[编辑]
指定能以给定的一组实参类型调用的可调用类型
(概念)[编辑]
(C++17)(C++23)
以给定实参和可能指定的返回类型(C++23 起)调用任意可调用(Callable) 对象
(函数模板)[编辑]
close