函数式编程(Functional Programming)是一种将计算当成数学函数,并避免数据可变状态的编程范式(Programming Paradigm)。C++是一门多范式语言(Multi-paradigm)所以也对FP有一定程度的支持。本文将简述一些C++中FP的常见写法。
lambda表达式
C++11开始引入了lambda表达式:支持代码中使用使用匿名函数。本着FP中函数也是一等公民的原则,匿名函数也可以成为函数参数、被传递或者被返回。
常见的std::for_each
写法:std::vector<int> numbers = {1, 2, 3, 4, 5};
std::for_each(numbers.begin(), numbers.end(), [](int num) {
std::cout << num * 2 << " ";
});
std::function
在C中传递函数往往需要声明函数指针,函数指针一般用于在异步场景中被注册为回调函数。C++中可以使用一种通用的多态函数封装结构std::function
来存储、拷贝、调用一个可被调用的结构 (lambda, 函数指针, 或函数)。使用函数式相关的功能往往需要引入<functional>
头文件。例:
|
std::bind
std::bind
是C++中用于实现柯里化(Currying)的模板方法,通过使用std::placeholders
作为参数占位符号,可以创建出新的函数。例:
int add(int a, int b) {
return a + b;
}
int main() {
auto add3 = std::bind(add, std::placeholders::_1, 3);
std::cout << "Result: " << add3(2) << std::endl;
return 0;
}