C++ 命名要求: 可调用 (Callable)
一个 可调用 (Callable) 类型是指对于其 INVOKE 和 INVOKE<R> 操作(例如由 std::function、std::bind 和 std:🧵:thread 使用)适用的类型。
INVOKE 可以使用库函数 std::invoke 显式执行。 (自 C++17 起)INVOKE<R> 可以使用库函数 std::invoke_r 显式执行。 (自 C++23 起)
要求
如果满足以下条件,则类型 T 满足 可调用 (Callable):
给定
f
,一个类型为T
的对象ArgTypes
,合适的参数类型列表R
,合适的返回类型
以下表达式必须有效
公有 | 表达式 | 要求 |
公有 |
| 该表达式在未求值上下文中是合法的 |
备注
指向数据成员的指针是 可调用 (Callable) 的,即使没有发生函数调用。
标准库
此外,以下标准库设施接受任何 可调用 (Callable) 类型(不仅仅是 函数对象 (FunctionObject))
公有 | function(C++11) | 包装任何可复制构造类型的可调用对象,具有指定的函数调用签名 |
公有 | move_only_function(C++23) | 包装任何类型的可调用对象,具有指定的函数调用签名 |
公有 | bind(C++11) | 将一个或多个参数绑定到函数对象 |
公有 | bind_front(C++20) bind_back(C++23) | 按顺序将可变数量的参数绑定到函数对象 |
公有 | reference_wrapper(C++11) | 可复制构造 (CopyConstructible) 和 可复制赋值 (CopyAssignable) 引用包装器 |
公有 | result_of(C++11) (C++20 中移除) invoke_result(C++17) | 推导使用一组参数调用可调用对象的返回类型 |
公有 | thread(C++11) | 管理一个单独的线程 |
公有 | jthread(C++20) | 支持自动加入和取消的 std::thread |
公有 | call_once(C++11) | 即使从多个线程调用,也只调用一次函数 |
公有 | async(C++11) | 异步运行函数(可能在新线程中),并返回一个将保存结果的 std::future |
公有 | packaged_task(C++11) | 封装一个函数以存储其返回值以供异步检索 |