gpt4 book ai didi

c++ - 半自动添加事件处理程序方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:21:27 26 4
gpt4 key购买 nike

背景:我正在尝试在 C++14 中实现状态机,以此作为熟悉现代 C++ 的练习。为此,我正在实现一个事件处理机制,以便 State对象可以在内部或通过转换到另一个状态来处理事件。

目标:State定义一个 virtual void handleEvent(const Event& e)方法和State子类应该能够为 Event 的范围定义方法他们选择的子类。

当前解决方案:使用 std::unordered_map<std::type_index, std::function<void(const Event&)>>和一种方法 template<class EventT> addHandler(std::function<void(const EventT&)>)目前似乎是最好的选择,但是有很多重复,因为每个实际的处理程序方法都必须添加到 State 的构造函数中的映射中。子类。这个添加非常冗长,因为实际的处理程序需要有 this绑定(bind)以便它可以传递给基类 addHandler方法。

问题:是否有更好的解决方案,在添加事件处理程序方面重复更少、自动化程度更高?

最佳答案

我找到了一个至少更简洁的解决方案。附加到主要State类,我定义了一个模板类IEventHandler<EventT>使用函数 virtual void handleEvent(const EventT&) .

State然后子类也继承自例如IEventHandler<ConcreteEvent>和通用 handleEventState 中发挥作用使用 dynamic_cast看看是否this为当前事件类型实现事件处理程序。 this的 Actor 版然后可以用来处理事件。

这里仍然有一些重复,但至少我不必像我以前的解决方案那样在构造函数中单独注册处理程序。

关于c++ - 半自动添加事件处理程序方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35112582/

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