 evgeniy1294 (16.12.2019 16:42 - 23:28, просмотров: 206) ответил _Constantin24 на 1) Наследник? покажите пример.
 evgeniy1294 (16.12.2019 16:42 - 23:28, просмотров: 206) ответил _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