我的目标是为地图创建一个“验证器”对象。我想如何使用它的一个例子:
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++?
答案 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表达式。