任何定义了函数调用操作符的对象都是函数对象。C++ 支持创建、操作新的函数对象,同时也提供了许多内置的函数对象。
函数包装器
std::function 提供存储任意类型函数对象的支持。
包装具有指定函数调用签名的任意类型的可调用对象
类模板 std::function
是通用多态函数封装器。 std::function
的实例能存储、复制及调用任何可调用 (Callable) 目标——函数、 lambda 表达式、 bind 表达式或其他函数对象,还有指向成员函数指针和指向数据成员指针。
存储的可调用对象被称为 std::function
的目标。若 std::function
不含目标,则称它为空。调用空 std::function
的目标导致抛出 std::bad_function_call 异常。
std::function
满足可复制构造 (CopyConstructible) 和可复制赋值 (CopyAssignable) 。
成员类型
类型 | 定义 |
result_type |
R |
argument_type (C++17 中弃用)(C++20 中移除) |
若 sizeof...(Args)==1 且 T 是 Args... 中首个且唯一的类型,则为 T |
first_argument_type (C++17 中弃用)(C++20 中移除) |
若 sizeof...(Args)==2 且 T1 是 Args... 中二个类型的第一个,则为 T1 |
second_argument_type (C++17 中弃用)(C++20 中移除) |
若 sizeof...(Args)==2 且 T2 是 Args... |