我正在尝试在 C++ 上进行某种奇怪的多态性:
我有两个类树:
状态 <-- 阶段 <-- Stage_1、Stage_2、Stage_3
Action <-- ActionState <-- ActionState_Clear, ActionState_Begin, ActionState_[...]
我想在 Stage_1 上定义一些获取 Action 作为参数的方法:
State
{
virtual void exec_action(Action *tAct)
{
std:cout << "NOT IMPLEMENTED" << endl;
};
}
Stage_1
{
virtual void exec_action(ActionStage_Clear *tAct)
{
std::cout << "ACTION STAGE CLEAR" << endl;
}
virtual void exec_action(ActionStage_Begin *tAct)
{
std::cout << "ACTION STAGE BEGIN" << endl;
}
}
Action *pAct = new ActionStage_Clear();
State* pSta = new Stage_1();
**pSta->exec_action(pAct);**
我希望它显示“ACTION STAGE CLEAR”,但它显示“NOT IMPLEMENTED”。那是 - 我认为 - 因为没有任何 exec_action(Action *) 的实现(尽管它的子类有一些实现)。
编辑:我将向您展示图表的一小部分: 我有阶段和行动。我将有一个指向 Stage_1, 2 .. 的指针和一个指向 Action_1, 2 ... 我想调用 Stage_n->exec_action(Action_n) 并且应该执行子代码:Action_1::exec_action(Action_1)。 (如果未实现,则应调用 Action::exec_action(Action))。
问题是
我该如何解决? 有没有其他方法可以让它发挥作用?
谢谢,请原谅我的英语。
最佳答案
你想要double dispatch这里。虚函数直接只提供一个。双重分派(dispatch)的一个很好的例子是 Visitor pattern ,这可能直接适用于您的任务。
关于c++ - 制作奇怪的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891401/