Предложения по реализации для создания выражения, которое позже использовалось для оценки содержимого карты в c ++? - PullRequest
0 голосов
/ 09 августа 2010

Моя цель - создать объект «валидатор» для карт.Пример того, как я хотел бы использовать его:

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) вернул бы true, если some_map["key name 1"] было пусто и some_map["key name 2"] существует, или если some_map["key name 3"] имеет 3 элемента.

Буду признателен за любые предложения по реализации.

См. Этот пост для моего предыдущего вопроса относительно реализации, которую я пытался:создать перегруженные операторы для указателей наддува в C ++?

Ответы [ 2 ]

2 голосов
/ 09 августа 2010

Использование этого синтаксиса выражения сделает его очень сложным. В прошлом я всегда делал так, чтобы у меня был абстрактный класс Rule, из которого я получаю конкретные типы правил. Затем я добавляю их в валидатор:

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

и затем вызовите функцию validate () для валидатора. Это не учитывает непосредственно «and» и «or», но вы можете обойти это с помощью пары «поддельных» правил, называемых AndRule и OrRule.

0 голосов
/ 09 августа 2010

Похоже, то, что вы хотите, обычно называется лямбда. Пока вы можете посмотреть Boost :: lambda . В C ++ 0x лямбда-выражения будут напрямую поддерживаться языком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...