Здравствуйте, гость ( Вход | Регистрация )
AlexandrVol | Дата 9.9.2023, 0:18 |
Кста, полезные курсы для программирования на c# можно найти на ggsel Кста, полезные курсы для программирования на c# можно найти на ggsel |
|
Алексей1153 | Дата 2.1.2021, 13:12 |
Litkevich Yuriy, можно сказать, что ничем, но в редких случаях компилятор может перепутать с синтаксисом вызова или объявления функции. Со списком инициализации всё всегда однозначно | |
Litkevich Yuriy | Дата 2.1.2021, 1:22 |
Pin{} - создание экземпляра класса Pin с конструктором по умолчанию чем отличается от традиционного Pin() ? |
|
Алексей1153 | Дата 31.12.2020, 12:03 |
что значит using в этом месте объявление алиаса (более удобная замена typedef) почему здесь Pin с фигурными скобками {} - пустой список инициализации Pin{} - создание экземпляра класса Pin с конструктором по умолчанию ControlWay{Pin{}} - создание экземпляра класса ControlWay, конструктор принимает ссылку на объект класса Pin union тут не используется |
|
Litkevich Yuriy | Дата 30.12.2020, 12:10 |
using ControlWay=std::variant<EmptyDevice,Pin,UART,SoftUART>; что значит using в этом месте?m_DeviceList.addDevice(new ControlWay{Pin{}}); почему здесь Pin с фигурными скобками?Если я правильно понял, то ControlWay с фигурными потому что он union или нет? |
|
Алексей1153 | Дата 30.12.2020, 9:18 |
https://onlinegdb.com/r1J-2ctTv
Цитата Pin UART SoftUART |
|
Алексей1153 | Дата 30.12.2020, 8:34 |
Цитата но наличие виртуальных функций для микроконтроллерного применения - плохо. это замедляет код и раздувает его из-за vtable. немного замедлит (вряд ли заметно), но не раздует. А вот шаблоны раздуют программный код сильно. И отлаживать их будет сложнее. Компилить дольше тоже. А стандарт C++ какой? Если 17, то std::variant подойдёт если что, реализацию std::variant можно найти, если компилятор его ещё не умеет ) |
|
Litkevich Yuriy | Дата 30.12.2020, 7:53 |
Пытаюсь понять, как можно в С++ реализовать полиморфизм времени компиляции для следующей задачи. Имеется шина 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() надо будет аргумент шаблона указывать. Может кому-то подобную иерархию со статическим полиморфизмом доводилось реализовывать? В идеале хотелось бы получить такой код применения:
|
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 4.12.2024, 16:11 |