gpt4 book ai didi

c++ - 将回调传递给组件列表的包装器 c++

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:31 25 4
gpt4 key购买 nike

我有一个遗留软件,只有一个管理程序来控制程序的运行。它在整个程序的执行过程中调用各种回调类的方法。这些是用户 Hook 。问题是,在这 1000 个不同的钩子(Hook)中,1)他们每个人显然都有不同的界面2) run manager 每个只有一个 slot。

我注意到,只允许用户向运行管理器注册每个用户 Hook 类的一个实例会导致我的组出现大量意大利面条代码。我想编写包含 hookins 列表的简单包装器,然后遍历列表并调用每个实例的回调。示例:

class SomeLegacyUserActionClass
{
public:
virtual void A();
virtual void B();
};

class MyWrapper : public SomeLegacyUserActionClass
{
std::vector< SomeLegacyUserActionClass* > actionList;
public:
void A()
{
// loop over each action in actionList
{
action->A();
}
}

void B()
{
// loop over each action in actionList
{
action->B();
}
}

void addAction( SomeLegacyUserActionClass* action ) { ... }
};

处理这么多类会变得非常乏味和丑陋。有什么方法可以让我一口气制作模板类或其他东西吗?这里显然有一个模式,我只是不知道我是否可以在 c++ 中以某种方式利用它。

我想我可以让我的团队为他们的所有操作实现某种装饰器模式,并取消 vector 和循环。

谢谢

最佳答案

这对于模板是不可能的,因为没有办法检索用于模板的类型的成员函数列表。如果您确实有很多类,使用经典代码生成可能是明智的。

关于c++ - 将回调传递给组件列表的包装器 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9324253/

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