设计问题:枚举或函数或其他什么
Design Issue : Enum or functions or something else
我遇到了一个设计问题:
对于一些命令,我有以下整数集,例如:
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向我发送一些枚举,然后我将其切换为类似的操作
如果你在很多地方都有开关,我认为你应该避免。如果它只在一个地方,也许没关系。但一般来说,我会避免这种方法,因为它会使添加新类型变得困难。你忘记了一个开关,然后调试了几个小时。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 什么时候调用析构函数
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 是什么让放置新调用对象的构造函数?
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 函数名称表示什么等等
- 在函数中拥有函数原型的目的是什么?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- C++:使用方法调用析构函数的顺序是什么?
- 将此布尔值传递给此函数的最有效方法是什么?
- lambda函数什么时候对C++中的类有用
- 函数什么时候必须在c++中返回引用
- 如果void类型函数什么都不返回会发生什么