Namespaces
Variants

C++ named requirements: Callable

From cppreference.net
C++ named requirements

一个 可调用(Callable) 类型是指适用于 INVOKE INVOKE<R> 操作的类型(这些操作被诸如 std::function std::bind 以及 std::thread::thread 等组件所使用)。

INVOKE 可以通过库函数 std::invoke 显式执行。

(since C++17)

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

(since C++23)

目录

要求

类型 T 满足 Callable

给定

  • f ,类型为 T 的对象,
  • ArgTypes ,合适的参数类型列表,
  • R ,合适的返回类型。

以下表达式必须有效:

表达式 要求
INVOKE<R> ( f, std:: declval < ArgTypes > ( ) ... ) 该表达式在未求值语境中必须是良构的。

注释

指向数据成员的指针 可调用 的,即使没有发生任何函数调用。

标准库

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

(C++11)
任何可复制构造的可调用对象的可复制包装器
(类模板)
支持给定调用签名中限定符的任何可调用对象的仅移动包装器
(类模板)
支持给定调用签名中限定符的任何可复制构造可调用对象的可复制包装器
(类模板)
任何可调用对象的非拥有包装器
(类模板)
(C++11)
将一个或多个参数绑定到函数对象
(函数模板)
(C++20) (C++23)
按顺序将可变数量的参数绑定到函数对象
(函数模板)
CopyConstructible CopyAssignable 的引用包装器
(类模板)
(C++11) (removed in C++20) (C++17)
推导使用一组参数调用可调用对象的结果类型
(类模板)
(C++11)
管理独立线程
(类)
(C++20)
支持自动连接和取消功能的 std::thread
(类)
(C++11)
即使从多个线程调用也仅调用函数一次
(函数模板)
(C++11)
异步运行函数(可能在新线程中)并返回将保存结果的 std::future
(函数模板)
包装函数以存储其返回值供异步检索
(类模板)

另请参阅

检查类型是否可以用给定参数类型调用(如同通过 std::invoke
(类模板)
规定可调用类型可以用给定参数类型集进行调用
(概念)
(C++17) (C++23)
使用给定参数调用任意 Callable 对象 并可指定返回类型 (C++23 起)
(函数模板)