2012-12-17 2 views
0

뭔가 다른 : 내가 좋아하는 몇 가지 명령에 대한 정수의 집합을 다음 한디자인 문제가 : 열거 나 기능이나 내가 디자인 문제가 오전

이 : 추가의 우선 순위

addition = {2,3,4,5} 
subtraction = {3,6,9} 

입니다

> 하위의를 . 이러한 명령은 데이터 구조로서 작동

는 그래서

class Command{ 
    int priority; 
    public: 
    bool operator <(const Command &com); 
    bool isInSet(int); 
    // i donot want this to be int , 
    // may be tommorrow i go for strings or char. 
    // How to do this. AND 
    void execute(int); // should it be here? 
}; 

같은 클래스를 만들었다.

모든 명령이 명령을 실행하는 방법을 알고 있어야합니다. 즉 명령 자체에 기능이 있어야합니다.

execute()가 Command 내부로 들어가면 데이터 구조에 어떻게 액세스합니까? 따라서 Command에는이 DS에 대한 포인터가 있어야합니다.

또는 쌍이어야하지만 클래스 실행에는 DS에 대한 포인터가 필요합니다.

아니면이 명령처럼해야 할 것은 좀 열거를 전송 한 후 나는 무엇을해야 하는가가

enum {PUSH, POP}; 

while(!commands[i].isInSet(3)) 
    ++i; 

switch(comands[i].getName()) 
{ 
    case PUSH: 
      // operations on DS i have all of them in this scope. :) 
    case POP: 
      ... 
} 

같은 뭔가를 전환?

다른 좋은 방법이 있습니까? 감사합니다. .

답변

1

은 내가 아주 잘 질문을받을 모르겠지만, :

모든 명령을 iteself 즉 명령 자체 inseide 기능이 있어야 실행하는 방법을 알고 있어야합니다.

나는 생각합니다. 명령의 논리를 클래스의 메서드로 포함합니다. 당신은 다른 구조체를 사용하기를 원하기 때문에 데이터 유형의 인터페이스 역할을하는 추상 기본 클래스를 만들 것입니다. 이 명령은 기본 클래스에 대한 포인터를 받아들이고 인터페이스를 사용하여 기본 클래스에 대한 작업을 수행합니다.

execute()가 명령 내에 들어가면 데이터 구조에 어떻게 액세스합니까? 따라서 Command에는이 DS에 대한 포인터가 있어야합니다.

네, 전적으로 괜찮은 것 같습니다.

아니면이 명령처럼해야하는 것은 좀 열거를 보내고 당신이 많은 장소에 스위치를해야한다면 내가 그것을

처럼 뭔가를 전환, 난 당신이 그것을 피할한다고 생각합니다. 그것이 한 곳에 만 있다면 아마 괜찮을 것입니다. 그러나 일반적으로 말해서 새로운 유형을 추가하기가 어렵 기 때문에이 방법을 피합니다. 하나의 스위치를 잊어 버린 다음 몇 시간 동안 디버깅하십시오.

관련 문제