2012-12-17 38 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? 
}; 

由於這些命令上的數據結構進行操作。

每個命令都應該知道如何執行iteself,即應該有一個函數使命令本身無用。

如果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命令本身的功能。

我想 - 是的。我將這個命令的邏輯作爲這個類的一個方法。你想使用不同的結構,所以我會創建一個抽象基類,充當數據類型的接口。該命令將接受指向基類的指針,並使用該接口對其執行操作。

如果執行()進入命令裏面,它是如何將訪問的數據結構?所以Command應該有一個指向這個DS的指針。

是的,我認爲這是完全沒問題的。

還是應該像命令將我一些枚舉,然後切換它像做

如果你有很多地方開關,我想你應該避免。如果它只在一個地方 - 也許沒關係。但總的來說,我會避免這種方法,因爲它會使添加新類型變得困難。你忘了一個開關,然後調試幾個小時。