Re[3]: Статический класс или namespace для singleton?
От: kov_serg Россия  
Дата: 20.07.23 23:36
Оценка: 3 (1)
Здравствуйте, cppguard, Вы писали:


C>С таким подходом, как минимум, одна проблема — в конструкторе происходит неявная инициализация.

С чего бы это? Вас никто не заставляет пользоваться конструктором для инициализации, это можно делать отдельными методами.
struct SerialImpl : Serial {
  enum { buf_size=16 };
  char tx_buf[buf_size], rx_buf[buf_size];
  ...
} serial[2];
...
void Board::config() {
    serial[0].config(portA_config);
    serial[1].config(portB_config);
    ...
}
Serial* Board::getMainSerial() { return &serial[0]; }
Serial* Board::getAuxSerial() { return &serial[1]; }


C>Если об этом не знать, то можно дважды инициализировать устройство. Либо везде передавать ссылку на Serial, что тоже неудобно. А чем плох вариант с namespace? Состояние хранится в двух переменных — rx_buffer, tx_buffer. Они делаются статическими и перестают быть видимыми вне модуля. Инициализировать их не надо.


Зачем везде передавать ссылку на Serial просто пишите в классе MyMegaDevice и this будет неявно с вами
struct MyMegaDevice {
    Board board[1];
    void fn();
    ...
};
...
void MyMegaDevice::fn() {
    Serial *serial=board->getMainSerial();
    ...
}
Отредактировано 20.07.2023 23:38 kov_serg . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.