Ежедневный бит (е) C++ # 172, Составление представлений C++ 20 без добавления избыточных копий.

При работе с представлениями C++20 создание функций, инкапсулирующих сложные композиции представлений, может показаться заманчивым.

Однако это, скорее всего, приведет к ненужным копиям данных. Вместо этого рассмотрите возможность компоновки представлений как встроенных переменных constexpr.

#include <ranges>
#include <cctype>

constexpr inline auto trim_front = 
  std::views::drop_while([](int c) { return std::isspace(c); });
constexpr inline auto trim_back = 
  std::views::reverse | trim_front | std::views::reverse;
constexpr inline auto trim_space = 
  trim_back | trim_front;


std::string str = "    abc    \t";

// Compose the view with data
auto lazy_trimmed = str | trim_space;

// Generate the output (before C++23 std::ranges::to)
std::string out(lazy_trimmed.begin(), lazy_trimmed.end());
// out == "abc"

Откройте пример в Compiler Explorer.