简短描述:
我正在迭代向量,在向量中的每个对象上调用虚函数,以便执行一系列动作.向量是基类,迭代器也是.所有的对象都是孩子.当调用虚函数时,它执行基类的函数.
(真的)长描述:我试图模拟一个有一系列行为的生物.我的基类是抽象的,只有两个函数(虚拟),所有子类都被覆盖了:
class Behavior
{
public:
Behavior();
~Behavior(void){}
virtual void execute(){}
virtual BEHAVIOR_TYPE getType() {return m_Type;}
protected:
BEHAVIOR_TYPE m_Type;
};
Run Code Online (Sandbox Code Playgroud)
我创造了许多孩子的行为,比如移动,消费,侦察等.
class Move :
public Behavior
{
public:
BEHAVIOR_TYPE getType() {return m_Type;}
enum Direction {N, NE, E, SE, S, SW, W, NW};
Move(DOCO * d);
~Move(void);
void execute() ;
Direction chooseDirection();
void setDirection(Direction newDirection);
private:
Direction m_Direction;
DOCO *I;
BEHAVIOR_TYPE m_Type;
};
Run Code Online (Sandbox Code Playgroud)
我创建了一个向量,我在其上推送了每个Behavior子类的实例以及遍历它的迭代器:
vector<Behavior> m_Behavior;
vector<Behavior>::iterator bIt;
Run Code Online (Sandbox Code Playgroud)
当生物获得动作序列时,我尝试迭代向量,取消引用迭代器,并调用执行函数:
void World::justDoIt()
{
for(dIt=myDOCO.begin(); dIt!=myDOCO.end(); ++dIt)
{
vector<Behavior>::iterator myBehavior=(dIt)->getFirstBehavior();
vector<Behavior>::iterator end=(dIt)->getLastBehavior(); …Run Code Online (Sandbox Code Playgroud) 从RobotFramework中的关键字获取返回变量通常很容易,只需在关键字中放入一个返回值,并在变量后面运行关键字来存储返回值.
当我想有条件地运行该关键字时遇到问题.关键字Run Keyword If和Run Keyword Unless关键字都Wait Until Keyword Succeeds希望将关键字作为第一个参数,如果第一个参数是变量,则会抛出错误.
目前我正在通过在关键字中设置套件级变量来解决这个问题,我知道我将有条件地运行,但这感觉有些笨拙.更糟糕的是,我必须重构任何在最初设计时作为条件关键字不需要的关键字.当然,我可能永远不会使用返回变量,并且总是设置套件级变量,但这只会让我觉得很脏.
我还没有找到一个干净的方法来做到这一点.它有效,但我希望其他人找到更好的方法.