V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
maredbf
V2EX  ›  分享创造

Patternia v0.9.0 – C++ 模式匹配库

  •  
  •   maredbf · 3 月 13 日 · 728 次点击

    之前在 V2EX 发过 Patternia 的初版介绍,经过多个月的迭代,目前已发布 v0.9.0 ,整理一下当前状态。

    Patternia 是一个 header-only 的 C++17 模式匹配库,目标是为 C++ 提供结构化的条件分支与数据解构能力,替代分散的 if/switch 与手动类型判别。零运行时开销,不依赖 RTTI 和虚函数。

    相较上次发帖时的状态,v0.9.0 的主要进展:

    • 补全了 std::variant 的类型分发,通过 is<T> / as<T> 匹配
    • 引入了 PTN_WHEREPTN_LET 命名守卫语法,替代手写 lambda 做谓词约束
    • 清理了早期遗留 API ( bind()、_1/_2/_3 、type:: 命名空间等)
    • 修复了 MSVC 下 callable guard 的编译器兼容问题
    • 已添加至 vcpkg 官方源
      #include <ptn/patternia.hpp>
      using namespace ptn;
    
      // 值守卫
      const char *bucket(int x) {
        return match(x) | on(
          $[PTN_LET(value, value < 0)]  >> "negative",
          $[PTN_LET(value, value < 10)] >> "small",
          _ >> "large"
        );
      }
    
      // 结构解构 + 命名守卫
      struct Point { int x; int y; };
    
      bool on_diagonal(const Point &p) {
        return match(p) | on(
          $(has<&Point::x, &Point::y>())[PTN_WHERE((x, y), x == y)] >> true,
          _ >> false
        );
      }
    

    后续计划包括穷尽性检查与编译期诊断的完善。欢迎 issue 、反馈和设计层面的讨论。

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2290 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 01:04 · PVG 09:04 · LAX 18:04 · JFK 21:04
    ♥ Do have faith in what you're doing.