【问题标题】:Design Issue : Enum or functions or something else设计问题:枚举或函数或其他
【发布时间】:2012-12-17 08:30:36
【问题描述】:

我遇到了设计问题:

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

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() 进入命令内部,它将如何访问数据结构?所以 Command 也应该有一个指向这个 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:
            ...
}

我该怎么办?

还有什么好的方法吗? 谢谢。

【问题讨论】:

    标签: c++ function pointers enums


    【解决方案1】:

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

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

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

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

    是的,我认为这完全没问题。

    还是应该像 Command 向我发送一些枚举,然后我将其切换为类似

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多