나는 파서가 알아야 할 모든 종류의 파일 (현재 소스, 헤더, 리소스)을 보유하고있는 "fileType"이 enum
인 클래스 Target
을 가지고있다. 내 구문 분석 기능과 같은 일반적인 뭔가 할 수있을 싶습니다확장 가능한 파서 디자인
if(token == some_known_fileType)
put_nextToken_in_the_list_for_that_fileType();
else
return an_error();
을 그러나 캐치가있다 : 나는 단순히 enum
을 확장 Target
의 서브 클래스로 알려진 파일 형식을 확장 할 수 있도록하고 싶습니다 올바른 방법으로, 내가 이것을 어떻게했는지에 관해서는 Base enum class inheritance을 참조하십시오. 위의 코드를 수정하고 싶지는 않지만 목표를 전반적으로 확장하십시오. C++ 0X가 필요할 수 있으며 대단히 환영합니다.
감사합니다.
업데이트 : 여기에서 설명하고 일부 클래스 선언을 게시하려고하면 디자인이 깨 졌음을 깨달았으며 클래스 구조에서 fileType의 전문화를 너무 심화 시키려고했습니다. 모든 알려진 유형의 전체 목록을 저장하는 곳은 한 곳만 필요했지만 그렇게하기 위해 의도적으로 디자인에 한 번에 두 곳의 목록에 액세스 할 수밖에 없었습니다. 이제는 모든 fileTypes의 목록이 SOURCE, HEADER 등의 키워드가 읽혀지고 거기에서 일반적으로 처리되어야한다는 것을 알게되었습니다. 한 곳에서 전체 목록을 저장하고 나중에 "거대한"enum
을 통해 해당 목록에 액세스합니다. 각 fileType
에 대해 set
이라는 별도의 이름 대신 std::map<fileType, std::set<std::string> >
이 논리적으로 선택되었습니다. 귀하의 답변에 braincandy 주셔서 감사합니다! 모든 생각은 여전히 환영받습니다.
코드를 추가 하시겠습니까?나는 당신이 무엇을하고 싶은지 확신 할 수 없다. ... – ronag