网站制作 外包,天津网站建设 阿土伯,免费建立个人文章网站,推广公司的广告语C之functional库用法整理 注#xff1a;整理一些突然学到的C知识#xff0c;随时mark一下 例如#xff1a;忘记的关键字用法#xff0c;新关键字#xff0c;新数据结构 C 的function库用法整理 C之functional库用法整理一、functional库的内建仿函数1. 存储和调用函数2. 存…C之functional库用法整理 注整理一些突然学到的C知识随时mark一下 例如忘记的关键字用法新关键字新数据结构 C 的function库用法整理 C之functional库用法整理一、functional库的内建仿函数1. 存储和调用函数2. 存储和调用 lambda 表达式3. 作为函数参数和返回值4. 可绑定到成员函数和带参数的函数 总结 提示本文为 C 中functional的写法和举例 一、functional库的内建仿函数 std::function 是 C11 标准库中的一个通用、多态的函数封装器。它可以保存、复制和调用任何可调用目标 — 函数、lambda 表达式或其他函数对象且作为函数的类型擦除手段。下面是 std::function 的一些常用用法
1. 存储和调用函数
你可以使用 std::function 来存储一个函数并在需要时调用它。
#include iostream
#include functionalvoid printHello() {std::cout Hello, World! std::endl;
}int main() {std::functionvoid() func printHello;func(); // 输出 Hello, World!return 0;
}2. 存储和调用 lambda 表达式
std::function 也可以用来存储和调用 lambda 表达式。
#include iostream
#include functionalint main() {std::functionvoid() func []() {std::cout Lambda expression called! std::endl;};func(); // 输出 Lambda expression called!return 0;
}3. 作为函数参数和返回值
你可以将 std::function 用作函数的参数或返回值实现更灵活的函数接口。
#include iostream
#include functionalvoid callFunction(std::functionvoid() func) {func();
}std::functionvoid() createFunction() {return []() {std::cout Function created and called! std::endl;};
}int main() {callFunction(createFunction()); // 输出 Function created and called!return 0;
}4. 可绑定到成员函数和带参数的函数
std::function 也可以绑定到类的成员函数或带参数的函数。
#include iostream
#include functionalclass MyClass {
public:void printMessage(const std::string msg) {std::cout msg std::endl;}
};int main() {MyClass obj;std::functionvoid(const std::string) func std::bind(MyClass::printMessage, obj, std::placeholders::_1);func(Bound member function called!); // 输出 Bound member function called!return 0;
}注意事项 std::function 通常比裸函数指针或函数对象占用更多的内存因为它需要在内部存储关于所保存函数类型的信息。 std::function 可以存储任何可调用对象这包括函数、函数对象、lambda 表达式等。但是它不能存储指向非静态成员函数的指针除非与 std::bind 或 lambda 表达式结合使用。
总结