前面两篇文章,我们分别学习了View的三大特性之轻量级、迟绑定,本篇文章,小编与大家一起来学习第三大特性:可组合。
在传统的数据处理中,如果要进行两种或两种以上的处理策略,通常会使用函数式编程或者链式编程的方式进行编写。
对 linux 中 shell 指令熟悉的朋友一定了解过管道运算符。其可以将表达式或者函数的结果传递到下一个表达式或函数中,这能够极大地简化代码的复杂度并提升语义的表述。
如下面一段 shell 指令,通过管道运算符方便地将 main.cpp 中带有"main"的行信息搜索出来。
cat main.cpp | grep "main"而 C++20 中通过重载 operator| 来实现管道的操作。具体的我们来看下面一个示例,将字符串反转并转为大写。
#include <algorithm> #include <cctype> #include <iostream> #include <ranges> #include <string> auto to_reverse = std::views::reverse; auto to_upper = std::views::transform([](char c) { return std::toupper(c); }); int main() { // 将字符串反转,并将字母都转化为大写 auto result = "hello leetcode" | to_reverse | to_upper; // 输出:EDOCTEEL OLLEH std::cout << std::string(result.begin(), result.end()) << std::endl; }此处将"hello leetcode"作为参数传递给 to_reverse,而 to_reverse 的结果再次作为参数传递到了 to_upper。这种编写范式消除了传统调用函数可能会写出的各种嵌套问题。使保证正确功能的情况下代码更加的简洁易懂。