C++ 设计问题:枚举或函数或其他

C++ 设计问题:枚举或函数或其他,c++,function,pointers,enums,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 b

我有一个设计问题:

对于某些命令,我有以下整数集,如:

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?
};
我该怎么办

还有其他好方法吗?
谢谢。

我不确定我是否很明白你的问题,但是:

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

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

如果execute()进入命令内部,它将如何访问数据结构?所以命令也应该有一个指向这个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:
            ...
}
如果你在很多地方都有开关,我想你应该避免。如果只在一个地方-也许没关系。但一般来说,我会避免这种方法,因为它会使添加新类型变得困难。您忘记了一个开关,然后调试了几个小时