gpt4 book ai didi

c++ - 制作奇怪的多态性

转载 作者:行者123 更新时间:2023-11-28 01:04:41 25 4
gpt4 key购买 nike

我正在尝试在 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))。

Design问题是

我该如何解决?有没有其他方法可以让它发挥作用?

谢谢,请原谅我的英语。

最佳答案

你想要double dispatch这里。虚函数直接只提供一个。双重分派(dispatch)的一个很好的例子是 Visitor pattern ,这可能直接适用于您的任务。

关于c++ - 制作奇怪的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com