【发布时间】:2012-12-17 03:15:36
【问题描述】:
我有 5 个称为操作符的类:
* Enter(x)
* Exit(x)
* Push(b,x,y)
* TurnOn(x)
* TurnOff(x)
还有 3 个称为谓词的类:
* At(x,y) - example : At(Robot,Room3) , At(Box1,Room1) , At(Box3,Corridor)
* SwithOn(x) - SwitchOn(Room2)
* SwitchOff(x) - SwitchOff(Room1) , SwitchOff(Room4)
而且我希望有良好的数据结构来存储它们。
一开始,我创建了两个基类并使用了继承:
Predicate类为At(x,y)、SwithOn(x)和SwitchOff(x)类
Operator为Enter(x),Exit(x),Push(b,x,y),TurnOn(x),TurnOff(x)。
我添加了两个双端队列:
std::deque<Operator> operators;
std::deque<Predicate> predicates;
然后,当我创建一个 Exit 运算符时:
Exit myExit ;
并将其推入双端队列:
operators.push_back(myExit); // this works fine
但是当我尝试从 operators deuqe 中提取某种元素时,我必须使用某种 cast 。
是否可以有一个可以存储多个(不同类型)对象的数据结构?
我仍处于规划阶段,您能否建议一些其他类型的设计,这样我在提取元素时不会遇到问题?我能想到的最好的事情就是多态性......
问候
【问题讨论】:
-
你可以使用 boost 变体。
-
为什么需要强制转换回特定的类(Enter、Exit 等)?你能否设计你的类,例如,你可以简单地调用
operator.operate(),它专门用于每个派生类?
标签: c++ inheritance data-structures deque