以后用于创建表达式的实现建议用于评估c ++中的地图内容?

时间:2010-08-09 15:32:39

标签: c++ validation maps

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

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

随后:

if(my_validator.validate(some_map)) {
// do something
}

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

任何实施建议都将受到赞赏。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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