embedded systems – How to develop software drivers for the mcu peripherals in C++?

I have been developing a set of software drivers for the peripherals of a MCU. I need to implement those drivers in the C++ programming language. My idea was to model each driver by its own class.

Interface of a driver for the Peripheral01:

#include "HalCfg.h"

class Periph01 {
public:
    Periph01(HalCfg*);
    Periph01(const Periph01& orig);
    virtual ~Periph01();
    void init();
    int getCfg();
private:
    HalCfg *m_halCfg;
    int m_cfg;

};

Implementation of a driver for the Peripheral01:

#include "Periph01.h"

Periph01::Periph01(HalCfg *halCfg) {
    m_halCfg = halCfg;
}

Periph01::Periph01(const Periph01& orig) {
}

Periph01::~Periph01() {
}

void Periph01::init() {
    m_cfg = m_halCfg->periph01Cfg.cfg;
}

int Periph01::getCfg() {
    return m_cfg;
}

Each driver will have its configuration

struct Periph01Cfg
{
    int cfg;
};

Configuration of all the drivers will be aggregated at one place

#include "Periph01Cfg.h"

struct HalCfg
{
    Periph01Cfg periph01Cfg;
};

The usage will be following

int main(int argc, char** argv) {
    
    HalCfg halCfg;
    halCfg.periph01Cfg.cfg = 255;
    
    Periph01 periph01 = Periph01(&halCfg);
    periph01.init();
    
    cout << "Peripheral_01 configuration: " << periph01.getCfg() << endl;

    return 0;
}

The weakness of this solution is that I need to define a HalCfg type variable and then fill the configuration of all the peripherals at run time. From my point of view it would be better if I can fill the configuration of all the peripherals at compile time at one place in the software. Does anybody have any idea how to do that? Thanks in advance.