0%

C++中的函数式编程

函数式编程(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>头文件。例:

#include <iostream>
#include <functional>

int add(int a, int b) {
return a + b;
}

int main() {
std::function<int(int, int)> func = add;
std::cout << "Result: " << func(2, 3) << std::endl;
return 0;
}

std::bind

std::bind是C++中用于实现柯里化(Currying)的模板方法,通过使用std::placeholders作为参数占位符号,可以创建出新的函数。例:

#include <iostream>
#include <functional>

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;
}

std::ref

Disqus评论区没有正常加载,请使用科学上网