std::function
是 C++ 标准库中的一个模板类,它提供了一种通用、多态的函数封装。你可以将任何可调用对象(如函数、lambda 表达式、函数对象等)赋值给 std::function
对象,然后像调用普通函数一样调用它。
std::function
的主要优点是它允许你以一种类型安全的方式存储、复制和调用任何可调用对象,这使得回调和事件驱动编程变得更加容易。
以下是一个简单的例子,展示了如何使用 std::function
:
cpp复制代码
#include <iostream> | |
#include <functional> | |
// 定义一个普通的函数 | |
void print_hello() { | |
std::cout << "Hello from print_hello!\n"; | |
} | |
// 定义一个可调用对象(函数对象) | |
struct PrintHello { | |
void operator()() const { | |
std::cout << "Hello from PrintHello functor!\n"; | |
} | |
}; | |
int main() { | |
// 使用 std::function 存储一个函数 | |
std::function<void()> func1 = print_hello; | |
func1(); // 输出 "Hello from print_hello!" | |
// 使用 std::function 存储一个可调用对象 | |
std::function<void()> func2 = PrintHello(); | |
func2(); // 输出 "Hello from PrintHello functor!" | |
// 使用 lambda 表达式 | |
std::function<void()> func3 = []() { | |
std::cout << "Hello from lambda!\n"; | |
}; | |
func3(); // 输出 "Hello from lambda!" | |
return 0; | |
} |
在这个例子中,std::function<void()>
是一个模板实例,它表示一个不接受任何参数并返回 void
的可调用对象。你可以将任何满足这个签名的可调用对象赋值给 std::function<void()>
类型的变量,并通过这个变量来调用它。
std::function
也可以用于更复杂的签名,包括带有参数和返回值的函数。例如,std::function<int(int, int)>
可以存储一个接受两个 int
参数并返回一个 int
的函数或可调用对象。