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

时间:2012-02-17 07:09:04

标签: c++ templates wrapper

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

我注意到只允许用户在运行管理器中只注册每个用户挂钩类的一个实例,这会导致我的组中有很多意大利面条代码。我想编写包含一个钩子列表的简单包装器,然后循环遍历列表并调用每个实例的回调。例如:

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 ++中以某种方式利用它。

我想我可以让我的小组为他们的所有动作实现某种装饰模式,并消除向量和循环。

由于

1 个答案:

答案 0 :(得分:0)

模板无法做到这一点,因为无法检索要在模板中使用的类型的成员函数列表。如果你真的有很多课程,那么使用经典的代码生成可能是明智的。