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 {
    Periph01(const Periph01& orig);
    virtual ~Periph01();
    void init();
    int getCfg();
    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);
    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.