设计问题:枚举或功能或其他

时间:2012-12-17 08:30:37

标签: c++ function pointers enums

我遇到了设计问题:

对于某些命令,我​​有以下几组整数:

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

其中add的优先级是> sub。

所以我创建了一个像

这样的类
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的指针。

或者它应该像Command给我一些enum然后我切换它做类似

的事情
    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 个答案:

答案 0 :(得分:1)

我不确定我的问题是否很好,但是:

  

每个命令都应该知道如何执行iteself,即命令本身是否应该有一个函数。

我想 - 是的。我将命令的逻辑包含在类的方法中。您希望使用不同的结构,因此我将创建一个抽象基类,充当数据类型的接口。该命令将接受指向基类的指针,并使用该接口对其执行操作。

  

如果execute()进入Command,它将如何访问数据结构?所以Command也应该指向这个DS。

是的,我认为这完全可以。

  

或者它应该像Command给我一些enum然后我切换它做类似

的事情

如果你打开许多地方,我认为你应该避免它。如果它只在一个地方 - 也许没关系。但总的来说,我会避免使用这种方法,因为它会增加新类型的难度。你忘了一个开关,然后调试几个小时。