代码之家  ›  专栏  ›  技术社区  ›  Sonic Soul

C中的布尔聚合模式#

  •  3
  • Sonic Soul  · 技术社区  · 14 年前

    我正在编写一个小的查找应用程序,在那里我有一个控制台,可以方便地对缓存进行快速查询,以便进行健全性检查等。

    get SomeField=Blue
    

    这将比从缓存中获取与该筛选器匹配的所有对象要好。

    我可以用更多的过滤器

    get SomeField=Blue && SomeOtherField < 5
    

    如果我决定支持(),这会变得更复杂。

    这里使用的好模式是什么?或者可能是一个可以获取字符串并为我标记它的组件?

    例如,我想将以下内容分解为过滤器的子集

    get ((field1=x || field1=y) && field2>x)
    

    我能想到的唯一方法是使用regex,而不是将子字符串传递给设计用于创建特定筛选器的不同例程。(即安第斯山脉、奥勒奎斯山脉和格拉特桑山脉等)

    3 回复  |  直到 14 年前
        1
  •  2
  •   erikkallen    14 年前

    你不应该用regex来做这个,你需要一个完整的解析器。看看安特尔。

        2
  •  3
  •   3Dave    14 年前

    看看铁蟒。很容易集成到C应用程序中,并且已经支持所有标准的过程语言构造。我在游戏引擎中使用它来在调试时对场景状态进行实时调整。

        3
  •  1
  •   Chris Martin    14 年前

    您可以在这里使用类似于规范模式的东西。

    public interface ISpecification<T>
    {
        bool IsSatisfiedBy(T instance);
        ISpecification<T> And(ISpecification<T> specification);
        ISpecification<T> Or(ISpecification<T> specification);
        ISpecification<T> Not(ISpecification<T> specification);
    }
    

    完整工作示例 here