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

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

  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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector