2010-08-09 1 views
0

내 목표는지도에 "유효성 검사기"개체를 만드는 것입니다. 나중에나중에 C++에서지도의 내용을 평가하는 데 사용되는 표현식을 만들기위한 구현 제안 사항은 무엇입니까?

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

: : 나는 그것을 사용하려는 방법의 예 some_map["key name 1"]가 비어있는 경우

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

이 경우는, my_validator.validate(some_map) 사실 반환 및 some_map["key name 2"] 존재, 또는 some_map["key name 3"] 경우 3 개 요소를 가지고 있었다 .

구현 제안 사항에 만족하실 것입니다. How do I create overloaded operators for boost pointers in C++?

답변

0

그것은 당신이 일반적으로 람다이라고 원하는 같은 소리 :

은 구현 내가 시도했습니다에 대한 내 이전 질문에 대한이 게시물을 참조하십시오. 지금은 Boost::lambda을 찾아 볼 수 있습니다. C++ 0x에서 람다 식은 언어에 의해 직접 지원됩니다.

2

해당 표현 구문을 사용하면 매우 어려워 질 것입니다. 필자가 과거에 해왔 던 방식은 구체적인 규칙 유형을 파생시키는 추상 규칙 클래스를 갖는 것입니다. 그런 다음 유효성 검사기에 다음을 추가합니다.

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

그런 다음 유효성 검사기에서 validate() 함수를 호출합니다. 이것은 ands와 ors를 직접적으로 허용하지 않지만, AndRule과 OrRule이라는 두 가지 "가짜"규칙을 사용하여이를 처리 할 수 ​​있습니다.