C++ класс многих классов, разделяющих большие структуры, необходимые для построения
Я создал класс платы для представления физической печатной платы, на которой имеется множество различных модулей, например часы реального времени, модем, датчик температуры и т. Д. Я кодировал отдельные классы для модулей. Теперь пытаюсь объединить их в один класс, который содержит всю клейкую логику. Сложность в том, что для инициализации объектов требуется много общих параметров, около 30 параметров помещаются в структуру конфигурации. Ниже приведены два способа сделать конструктор объектом Board:
- Гигантский путь монстра
- Толковый способ (не работает)
Вопрос: Как я могу реорганизовать код, чтобы конструкторы элементов-членов класса 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);
}