View的三大特性之一:可组合
前面两篇文章我们分别学习了View的三大特性之轻量级、迟绑定本篇文章小编与大家一起来学习第三大特性可组合。在传统的数据处理中如果要进行两种或两种以上的处理策略通常会使用函数式编程或者链式编程的方式进行编写。对 linux 中 shell 指令熟悉的朋友一定了解过管道运算符。其可以将表达式或者函数的结果传递到下一个表达式或函数中这能够极大地简化代码的复杂度并提升语义的表述。如下面一段 shell 指令通过管道运算符方便地将 main.cpp 中带有main的行信息搜索出来。cat main.cpp | grep main而 C20 中通过重载 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。这种编写范式消除了传统调用函数可能会写出的各种嵌套问题。使保证正确功能的情况下代码更加的简洁易懂。