設計上の問題があります:
次のようないくつかのコマンドに対して、次の整数のセットがあります。
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 へのポインターが必要です。
またはペアにする必要がありますが、クラスの実行には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:
...
}
私は何をすべきか ?
他に良い方法はありますか?ありがとう。