C++ 将函数指针作为参数传递
【摘要】 前言在C++中,你可以通过函数指针、函数对象(functor,即重载了operator()的类或者lambda表达式)或者std::function来传递函数作为参数。以下是这些方法的示例: 1. 函数指针首先,你需要定义一个函数,然后你可以创建一个指向这个函数的指针,并将这个指针作为参数传递给另一个函数。#include <iostream>// 定义一个函数void printHell...
前言
在C++中,你可以通过函数指针、函数对象(functor,即重载了operator()
的类或者lambda表达式)或者std::function
来传递函数作为参数。以下是这些方法的示例:
1. 函数指针
首先,你需要定义一个函数,然后你可以创建一个指向这个函数的指针,并将这个指针作为参数传递给另一个函数。
#include <iostream>
// 定义一个函数
void printHello() {
std::cout << "Hello, World!" << std::endl;
}
// 定义一个接受函数指针作为参数的函数
void callFunction(void (*func)()) {
func();
}
int main() {
callFunction(printHello); // 传递函数名,它会被隐式转换为函数指针
return 0;
}
2. 函数对象(也称为仿函数或functor)
函数对象是一个重载了operator()
的类实例,它可以像函数一样被调用。
#include <iostream>
// 定义一个函数对象
class PrintHello {
public:
void operator()() const {
std::cout << "Hello, World!" << std::endl;
}
};
// 定义一个接受函数对象作为参数的函数
void callObject(const PrintHello& obj) {
obj(); // 调用函数对象
}
int main() {
PrintHello hello;
callObject(hello); // 传递函数对象实例
return 0;
}
3. std::function
std::function
是一个通用、多态的函数封装器。它允许你存储、复制和调用任何可调用的目标——函数、lambda表达式、bind表达式或其他函数对象,只要它们的签名兼容。
#include <iostream>
#include <functional>
// 定义一个简单的函数
void printHello() {
std::cout << "Hello, World!" << std::endl;
}
// 定义一个接受std::function作为参数的函数
void callFunction(const std::function<void()>& func) {
func();
}
int main() {
// 直接传递函数
callFunction(printHello);
// 使用lambda表达式
callFunction([]() {
std::cout << "Hello from lambda!" << std::endl;
});
return 0;
}
在上面的例子中,std::function<void()>
是一个类型,它表示接受没有参数并返回void
的可调用对象。你可以使用任何与这个签名兼容的可调用对象来创建std::function
的实例,并传递给callFunction
函数。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)