如何更好地编写这个c++程序

How to better write this C++ program

本文关键字:c++ 程序 何更好 更好      更新时间:2023-10-16

我有许多模块(c++类)使用一个通用的类(HW_util)

HW_util类实际初始化硬件。

所有模块都用HW_util对象的地址初始化。我有30多个模块,所以30多行只是做初始化,我发现这段代码很丑。有更好的方法来做到这一点吗?

class HW_Util
{
    InitHW();
    Functionality1_onHW();
    Functionality2_onHW();
    ..
    CleanupHW();
};

class Module1
{
    Module1(HW_Util *util) { m_Util = util; }
    ..
    HW_Util *m_Util;    
    void DoSomething()
    {
        //uses m_Util to do something
    }
};
class Module2
{
    Module2(HW_Util *util) { m_Util = util; }
    ..
    HW_Util *m_Util;    
    void DoSomething()
    {
        //uses m_Util to do something
    }
};
...
//I have around 30 such modules..
...

void main()
{
    HW_Util util;
    Module1 mod1(&util);    //I am passing util to all these modules, and I have around 30 such modules, ugly code
    Module1 mod1(&util);
    Module3 mod1(&util);
    Module4 mod1(&util);
    Module5 mod1(&util);

    util.InitHW();  //actually fill up the util
    mod1.DoSomething();
    mod2.DoSomething();
    ..

    util.CleanupHW();
}

你可以像这样定义一个类:

template<typename... M>
struct Modules: M... {
    Modules(HW_Util *util): M...{util} {}
};

然后,在您的main中,专门化它并初始化它,如下所示:

Modules<Module1, Module2> modules{&util};

注意Modules<Module1, Module2> Module1Module2
因此,以下语句适用:

Module1 &m1 = modules;
Module2 &m2 = modules;

这也意味着无论何时需要对Module1Module2的引用,都可以传递对Modules<Module1, Module2>的引用,例如在函数调用时。

在web上查找mixins以获得有关此习语的更多详细信息。