设计问题:枚举或函数或其他什么

Design Issue : Enum or functions or something else

本文关键字:函数 什么 其他 枚举 问题      更新时间:2023-10-16

我遇到了一个设计问题:

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

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

其中加法的优先级>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()进入命令内部,它将如何访问数据结构?所以命令也应该有一个指向这个DS-的指针

或者应该是一对,但类Execution需要指向DS-的指针

或者应该像Command向我发送一些枚举,然后我将其切换为类似的操作

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:
...
}

我该怎么办?

还有其他好方法吗?谢谢

我不确定我是否能很好地理解你的问题,但是:

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

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

如果execute()进入命令内部,它将如何访问数据结构?所以命令也应该有一个指向这个DS-的指针

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

或者应该像Command向我发送一些枚举,然后我将其切换为类似的操作

如果你在很多地方都有开关,我认为你应该避免。如果它只在一个地方,也许没关系。但一般来说,我会避免这种方法,因为它会使添加新类型变得困难。你忘记了一个开关,然后调试了几个小时。