C++ класс многих классов, разделяющих большие структуры, необходимые для построения

Я создал класс платы для представления физической печатной платы, на которой имеется множество различных модулей, например часы реального времени, модем, датчик температуры и т. Д. Я кодировал отдельные классы для модулей. Теперь пытаюсь объединить их в один класс, который содержит всю клейкую логику. Сложность в том, что для инициализации объектов требуется много общих параметров, около 30 параметров помещаются в структуру конфигурации. Ниже приведены два способа сделать конструктор объектом Board:

  1. Гигантский путь монстра
  2. Толковый способ (не работает)

Вопрос: Как я могу реорганизовать код, чтобы конструкторы элементов-членов класса Board не вызывались перед конструктором Board? Или какой разумный способ объединить классы модулей вместе, чтобы обеспечить функциональность более высокого уровня? Это мое первое приложение на C++, так что, возможно, я пропустил лодку, и вы могли бы порекомендовать совершенно другой шаблон, спасибо!

Вот код (я изменил код, потому что оригинальный был неясен. Я включил некоторые предложения от некоторых программист чувак:

// Large Struct with about 30 parameters
struct Config
{
    int param1;
    int param2;
    const char* param3;
    // ... and many more
};


// About 10 Modules (only 3 coded) which are initialised by passing in the large struct...
class Module1
{
    const int _param1;
    const int _param2;
public:
    Module1(const int param1, const int param2) : _param1(param1), _param2(param2) {};
};

class Module2
{
    const int _param1;
    const char* _param3;
public:
    Module2(const int param1, const char* param3) : _param1(param1), _param3(param3) {};
};

class Module3
{
    const int _param2;
    const char* _param3;
public:
    Module3(const int param2, const char* param3) : _param2(param2), _param3(param3) {};
};


class Board
{
public:
    // 1. MONSTER BIG CONSTRUCTOR: WORKS - Imagine 10 modules, with up to 8 params each
    Board(Config &config) : _config(config), \
    _module1(config.param1, config.param2),  \
    _module2(config.param1, config.param3),  \
    _module3(config.param2, config.param3) {};

    /*
    // 2. SENSIBLE CONSTRUCTOR: DOES NOT WORK!!!
    Does not work because the modules are tryign to be created because the board object,
    and there are no parameterless constructors for them, e.g. _module1() {};
    Board(Config config) : _config(config)
    {
        _module1(config.param1, config.param2);
        _module2(config.param1, config.param3);
        _module3(config.param2, config.param3);
    };
    */
private:
    Config      &_config;
    Module1     _module1;
    Module2     _module2;
    Module3     _module3;
};

int main()
{
    Config config
    {
        .param1 = 1,
        .param2 = 2,
        .param3 = "Foo"
    };

    Board board(config);
}

0 ответов

Другие вопросы по тегам