【问题标题】:Implementation suggestions for creating an expression later used to evaluate the contents of a map in c++?用于创建稍后用于在 C++ 中评估地图内容的表达式的实施建议?
【发布时间】:2010-08-09 15:32:38
【问题描述】:

我的目标是为地图创建一个“验证器”对象。我想如何使用它的一个例子:

MyValidator my_validator = (IsEmpty("key name 1") && DoesExist("key name 2")) || HasNElements("键名 3", num)

稍后:

如果(my_validator.validate(some_map)){ // 做点什么 }

在这种情况下,如果some_map["key name 1"] 为空且some_map["key name 2"] 存在,或者some_map["key name 3"] 有3 个元素,则my_validator.validate(some_map) 将返回true。

任何实施建议都将不胜感激。

有关我之前尝试的实现的问题,请参阅此帖子:How do I create overloaded operators for boost pointers in C++?

【问题讨论】:

    标签: c++ validation maps


    【解决方案1】:

    使用该表达式语法会变得非常困难。过去我一直这样做的方式是创建一个抽象的 Rule 类,从中派生出具体的规则类型。然后我将这些添加到验证器中:

    Validator v;
    v.add( new NotValueRule( "foo" ) );
    v.add( new NotIntRule ) );
    v.add( new BetweenRule( "a", "z" ) );
    

    然后在验证器上调用 validate() 函数。这不允许直接使用 ands 和 ors,但是您可以使用一些称为 AndRule 和 OrRule 的“假”规则来解决这个问题。

    【讨论】:

      【解决方案2】:

      听起来您想要的通常称为 Lambda。现在,您可以查找Boost::lambda。在 C++0x 中,语言将直接支持 lambda 表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多