gpt4 book ai didi

c++ - 将参数传递给采用父类参数的函数而不将参数转换为父类

转载 作者:搜寻专家 更新时间:2023-10-31 01:27:10 26 4
gpt4 key购买 nike

我正在构建一个 Boost 状态机。我的状态有一个指向它自己的后端 (fsm) 的指针来处理事件。我的状态机的所有事件都是 MySatetMachineEvent 类的子级(有一个示例子级,如 EventChild)。状态转换仅为 MySTateMachineEventEventChild 之类的子项定义。
为了清理我的代码,我想创建一个函数 processEvent(MySatetMachineEvent event) 来获取所有可能的事件。然后,此类应使用传递的事件调用 process_event() 函数。例如:

processEvent(MyStateMachineEvent event)
{
fsm.process_event(event);
}
processEvent(EventCild());

应该调用

fsm.process_event(EventChild());

创建这样的函数会导致使用 MyStateMachineEvent 实例调用 fsm.process_event() 的错误。如上所述,没有为这种情况定义状态转换。

这显然阻碍了我的状态机以正确的方式工作。


所以我的问题是,是否有办法将 EventChildMyStateMachineEvent 的其他子项传递给我的 processEvent(MySTateMachineEvent event) 函数无需将传递的对象转换为 MyStateMachineEvent


我知道覆盖我的功能的解决方案,例如

processEvent(EventChild event) {
fsm.process_event(event);
}

在我的例子中,这会导致可能的功能(内部有完全相同的代码行),因此我正在寻找一个更干净、更奇特的解决方案。

最佳答案

您可以使用函数模板:

template <typename Event>
void processEvent(Event event)
{
fsm.process_event(event);
}

每个实例化都会保留传入的 event 参数的确切类型。

关于c++ - 将参数传递给采用父类参数的函数而不将参数转换为父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53870950/

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