Здравствуйте, гость ( Вход | Регистрация )
|
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 |
|
|
|
![]() |
|
Awaken |
10.4.2025, 0:57
Сообщение
#2
|
|
Студент ![]() Группа: Неактивирован Сообщений: 14 Регистрация: 10.4.2025 Пользователь №: 5362 Спасибо сказали: 0 раз(а) Репутация: 0
|
не очень полезные
|
|
|
|
Litkevich Yuriy Статический полиморфизм 30.12.2020, 7:53
Алексей1153 Цитатано наличие виртуальных функций для микроконт... 30.12.2020, 8:34
Алексей1153 https://onlinegdb.com/r1J-2ctTv
#include <ios... 30.12.2020, 9:18
Litkevich Yuriy Цитата(Алексей1153 @ 30.12.2020, 11:18) u... 30.12.2020, 12:10
Алексей1153 Цитата(Litkevich Yuriy @ 30.12.2020, 14:1... 31.12.2020, 12:03
Litkevich Yuriy Цитата(Алексей1153 @ 31.12.2020, 14:03) P... 2.1.2021, 1:22
Алексей1153 Litkevich Yuriy, можно сказать, что ничем, но в ре... 2.1.2021, 13:12
AlexandrVol Кста, полезные курсы для программирования на c# мо... 9.9.2023, 0:18
Warburst и то верно 10.4.2025, 1:18![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 10.11.2025, 16:20 |