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

3 月 13 日
 maredbf

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

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

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

  #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 、反馈和设计层面的讨论。

734 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1198177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX