evgeniy1294 (16.12.2019 16:42 - 23:28, просмотров: 143) ответил _Constantin24 на 1) Наследник? покажите пример.
1) Самый правильный вариант, сделать все следующим образом, например реализация унифицированного интерфейса:
template <size_t rxbuf, size_t txbuf>
class UartInterface: protected hal::Interface, protected Pimple
{
public:
...
private:
std::array<std::uint8_t, rxbuf> rx;
std::array<std::uint8_t, txbuf> tx;
Pimple pimple{rx.data(), rx.size(), tx.data(), tx.size()};
...
}
Класс Interface - чисто виртуальный, он позволяет одинаково работать с любым интерфейсом. Pimple - private implementation, он содержит реализацию под конкретный интерфейс: uart, spi, i2c и т.д Pimple тоже наследуется от Interface.
UartInterface же содержит std::array, размер которых передается в конструктор Pimple. Это сделано для того, чтобы при инстанцировании шаблона UartInterface не плодить лишние функции.
А вот так лучше не делать, так как накладных расходов будет больше.
template<size_t rxbuf, size_t txbuf>
class UartInterface: protected hal::Interface
Т.е это как бы сумма вариантов 1 и 2