Menu

카테고리

C++20 ranges를 쓰면 파이프라인이 예뻐지긴 하는데, 디버깅/에러 메시지가 길어지는 단점이 있습니다.

작은 패턴

  • views::filter + views::transform는 조합이 좋음
  • 범위 생명주기(특히 임시 객체)만 조심
#include <ranges>
#include <vector>

auto evens_squared(const std::vector<int>& v) {
  namespace rv = std::ranges::views;
  return v
    | rv::filter([](int x){ return x % 2 == 0; })
    | rv::transform([](int x){ return x * x; });
}

메모

  • 범위는 “느리다”가 아니라 “어디서 materialize되는지”가 핵심
  • 필요하면 std::vector로 한 번 수집해서 안정적으로 사용

이 글은 샘플입니다.