Статический полиморфизм |
Здравствуйте, гость ( Вход | Регистрация )
Статический полиморфизм |
Litkevich Yuriy |
30.12.2020, 7:53
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Пытаюсь понять, как можно в С++ реализовать полиморфизм времени компиляции для следующей задачи.
Имеется шина 1-Wire (из названия понятно, что она однопроводная, несчитая общего проводника). Имеется N устройств на этой шине. Шина должна знать какие устройства на ней есть. Устройства должны знать на какой шине сидят. Устройства пользуются функциями-членами шины для выполнения своих задач.
Особенность 1-Wire: 1) может быть реализована програмным дрыганьем ножки микроконтроллера; 2) может быть реализована через аппаратный UART, т.е. передавая определённый байт огибающая сигнала будет повторять необходимую форму ипульсов 1-Wire. 3) сам UART можно реализовать программно дрыгая ножку микроконтроллера. Т.о. возможны следующие схемы реализации 1-Wire: OneWire(Pin); OneWire(UART); OneWire(SoftUART(Pin)); Сейчас у меня сделан абстрактный класс 1-Wire и наследники, реализующие один из 3-х способов.
// ====================================== Всё бы хорошо, но наличие виртуальных функций для микроконтроллерного применения - плохо. это замедляет код и раздувает его из-за vtable. Сначала хотел реализовать OneWire на шаблонах. Однако споткнулся на том, что класс OneWireDevice должен пользоваться OneWire и, в частности, возвращать OneWire. т.е. сделать сам OneWire шаблонным не получится, т.к. для метода OneWireDevice::wire() надо будет аргумент шаблона указывать. Может кому-то подобную иерархию со статическим полиморфизмом доводилось реализовывать? В идеале хотелось бы получить такой код применения:
Сообщение отредактировал Litkevich Yuriy - 30.12.2020, 12:12 |
|
|
Алексей1153 |
2.1.2021, 13:12
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Litkevich Yuriy, можно сказать, что ничем, но в редких случаях компилятор может перепутать с синтаксисом вызова или объявления функции. Со списком инициализации всё всегда однозначно
|
|
|
Текстовая версия | Сейчас: 29.11.2024, 1:05 |