C++ 具名要求:可调用(Callable)
来自cppreference.com
可调用(Callable) 类型是可应用 INVOKE 和 INVOKE<R> 操作(例如用于 std::function、std::bind 和 std::thread::thread)的类型。
库函数 std::invoke 可以显式执行 | (C++17 起) |
库函数 std::invoke_r 可以显式执行 | (C++23 起) |
目录 |
[编辑]要求
如果满足下列条件,那么类型 T
是可调用(Callable) 的:
给定
T
类型的对象f
- 适合的实参类型列表
ArgTypes
- 适合的返回类型
R
那么下列表达式必须合法:
表达式 | 要求 |
---|---|
INVOKE<R>(f, std::declval<ArgTypes>()...) | 该表达式在不求值语境中良构 |
[编辑]注解
数据成员指针是可调用(Callable) 的,尽管实际上并不发生函数调用。
[编辑]标准库
此外,下列标准库设施接受任何可调用(Callable) 类型(不仅是函数对象(FunctionObject) ):
(C++11) | 任意可复制构造的可调用对象的可复制包装 (类模板) |
(C++23) | 任意可调用对象的仅移动包装,支持给定调用签名中的限定符 (类模板) |
(C++26) | 任意可复制构造的可调用对象的可复制包装,支持给定调用签名中的限定符 (类模板) |
(C++26) | 任意可调用对象的无所有权包装 (类模板) |
(C++11) | 绑定一或多个实参到函数对象 (函数模板) |
(C++20)(C++23) | 按顺序绑定一定数量的实参到函数对象 (函数模板) |
(C++11) | 可复制构造(CopyConstructible) 且可复制赋值(CopyAssignable) 的引用包装器 (类模板) |
(C++11)(C++20 移除)(C++17) | 推导以一组实参调用一个可调用对象的结果类型 (类模板) |
(C++11) | 管理单独的线程 (类) |
(C++20) | 支持自动合并和取消的 std::thread (类) |
(C++11) | 仅调用函数一次,即使从多个线程调用 (函数模板) |
(C++11) | 异步运行一个函数(有可能在新线程中执行),并返回将保有它的结果的 std::future (函数模板) |
(C++11) | 打包一个函数,存储其返回值以进行异步获取 (类模板) |
[编辑]参阅
检查类型能否以给定的实参类型调用(如同以 std::invoke) (类模板) | |
(C++20) | 指定能以给定的一组实参类型调用的可调用类型 (概念) |
(C++17)(C++23) | 以给定实参和可能指定的返回类型(C++23 起)调用任意可调用(Callable) 对象 (函数模板) |