Перейти к содержанию
    

Нетиповой вариативный шаблон класса. Помогите написать.

2 hours ago, Сергей Борщ said:

Для этого достаточно знать этот язык на необходимом уровне. Пенять языку за недостаточность своих знаний - глупо.

Я ж потому и дал ссылку на статью чтоб поняли другую точку зрения. 
Да, это вина языка если его не понимают.
Как самые опытные  пилоты сажали Б-17 на брюхо, так и самые опытные пользователи С++ в embedded все время бессознательно ходят по граблям. 
А потому что язык не адаптирован к ожиданиям разработчиков под встраиваемые системы.

И прошла целая война пока поняли что не так в Б-17. 
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, DASM said:

Совершенно нечитабельные плюсы стали, особенно в последних стандартах

С этим соглашусь, я и сам плохо понимаю некоторые фишки Си++17. Но... никто же не заставляет вас их использовать. Ваш компилятор может поддерживать Си++14(17), а писать вы там можете хоть в стиле Си, используя только те инструменты, которы енеобходимы.

7 hours ago, DASM said:

30 летний развод и натягивание сов на глобусы

Ну... а компиляторы-то есть для встраиваемых систем?

7 hours ago, DASM said:

А если драйвер для USB написать надо.. "да пошел ты в Ж, насяльник"

Не соглашусь. Я как раз пишу только для встраиваемых систем, и драйвера в том числе (spi, dma, usart, ethernet, qspi, emc,) + драйвера для микросхем (часы, расширители портов ввода-вывода, АЦП, ЦАП и т.п.). Использую наследование, полиморфизм и инкапсуляцию. Соответсвенно: классы, перегрузка функций, виртуальные функции, переопределение операторов и тому подобное, и так далее. Это очень удобно. Но не навязываю свой подход. Все уже взрослые)

7 hours ago, DASM said:

Не, я не спорю, если вариться в кровавом энтерпрайзе, митапить тимлидить монадить мокать стабить паттернматчить и очковтиратить - супер язык.

Отчасти это справедливо для программистов ПК. Туда иногда действительно идут в силу обманчивой простоты программирования. В итоге экзешник с консольной программой весит 20 мБ (не шутка). А делает простую вещь: конвертирует файл из одного формата в другой.

 

4 hours ago, AlexandrY said:

А потому что язык не адаптирован к ожиданиям разработчиков под встраиваемые системы.

Так, а какой, всё таки, адаптирован? А то я пишу, и пока ничего подобного не замечаю)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, haker_fox said:

Соответсвенно: классы, перегрузка функций, виртуальные функции, переопределение операторов

а вот Линус не дал это протащить в ядро, и где он и где вы?

да я сам пользую, только чертыхаюсь при этом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, DASM said:

а вот Линус не дал это протащить в ядро, и где он и где вы?

А что, равнение на Линуса - новый тренд?))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, haker_fox said:

А что, равнение на Линуса - новый тренд?))

а что? На успешные проекты равняться плохо? Из известных эмбеддед на ++ знаю Арудуино............. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 minutes ago, DASM said:

а что? На успешные проекты равняться плохо?

Смотря какой успех вам нужен? Финансовый, удовлетворение личного интереса, признание окружающих, гордость за себя любимого? Ну и потом, я предпочитаю свое головой думать)) Ведь я только несу ответственность за свой проект.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понимаю, по вариативным шаблонам у нас один Антон специалист? Остальные мастера в другом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я прошу прощения за задержку с ответом. Неожиданно навалилась куча дел по работе :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Считаю, мне ничего не даст передача параметров из шаблона класса в шаблон функций этого класса. В вариативном шаблоне, допустим, передал я параметры. Но мне нужно использовать, например, только для двух пинов из шестнадцати, причем, не первых двух, а любых. То есть, нет никакого механизма выбора конкретных параметров из всего набора. Поэтому буду делать, как говорил - отдельный класс порта на все 16 ножек, и отдельные классы на 1, 2, 4, 8. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Допустим, сам класс может предоставлять базовый адрес порта и структуру регистров.

Также он может давать функции установки/сброса/смены режима битов порта по маске.

А вложенный шаблон класса (типа моего PinBus) - содержит лишь набор ножек, и умеет вычислять маски. Вот и удобство.

Я редко во всё это погружаюсь, поэтому быстренько набросать не получается :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 minutes ago, ViKo said:

Считаю, мне ничего не даст передача параметров из шаблона класса в шаблон функций этого класса. В вариативном шаблоне, допустим, передал я параметры. Но мне нужно использовать, например, только для двух пинов из шестнадцати, причем, не первых двух, а любых. То есть, нет никакого механизма выбора конкретных параметров из всего набора. Поэтому буду делать, как говорил - отдельный класс порта на все 16 ножек, и отдельные классы на 1, 2, 4, 8. 

А где вы этот перевод откопали, если речь о variadic .. ? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, haker_fox said:

Так, а какой, всё таки, адаптирован? А то я пишу, и пока ничего подобного не замечаю)

Ешё бы замечали, для этого надо как минимум поработать с пятеркой разных систем. 
Когнитивные искажения не замечают даже когда точно знают что они есть. А вы хотите заметить даже не будучи уверенным. 
Сначало надо поверить. :biggrin:

1 hour ago, ViKo said:

Я так понимаю, по вариативным шаблонам у нас один Антон специалист? Остальные мастера в другом?

Вы к сожалению изобретаете велосипед который потом вам будет мешать в кладовке. 
Мэйнстримный подход - это сделать объект пинов и сделать объект операций с пинами.
Если откроете какую-нибудь ось, то увидите что все делают операции с пинами через файловую абстракцию.  
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, DASM сказал:

А где вы этот перевод откопали, если речь о variadic .. ? 

Это не перевод, а мои дилетантские размышления. Предполагал использовать шаблон с переменным количеством аргументов. Но не подходит. 

Или вы спрашиваете о самом термине "variadic"? 

https://ru.m.wikipedia.org/wiki/Вариативный_шаблон

7 часов назад, AHTOXA сказал:

Допустим, сам класс может предоставлять базовый адрес порта и структуру регистров.
Также он может давать функции установки/сброса/смены режима битов порта по маске.
А вложенный шаблон класса (типа моего PinBus) - содержит лишь набор ножек, и умеет вычислять маски. Вот и удобство.
Я редко во всё это погружаюсь, поэтому быстренько набросать не получается :-)

Я насчет масок думал когда-то... Не хочу терять описания битов порта в виде структуры свойств (номер, тип, скорость, др.). А из них формировать маски для регистров порта, получается, нужно делать не в классе, а снаружи. Вручную.

6 часов назад, AlexandrY сказал:

Мэйнстримный подход - это сделать объект пинов и сделать объект операций с пинами.
Если откроете какую-нибудь ось, то увидите что все делают операции с пинами через файловую абстракцию.

Отдельные пины - неэффективно. Вот если эти объекты да собрать в порт. Представляется сложным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, AlexandrY said:

Если откроете какую-нибудь ось, то увидите что все делают операции с пинами через файловую абстракцию. 

А не лишнее ли это, если к примеру, речь идёт о Cortex-M0?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 часов назад, ViKo сказал:

Стивен Прата вас не поддержал бы.

 

В каком месте не поддержал? В вашей цитате я не увидел, чтобы было сказано, что лямбда - это функция. Термин "лямбда-функция" вовсе не означает, что это именно функция. Этот термин идёт из языков, где функции являются объектами первого класса, поэтому там лямбда - это функция. В С++ же функции не являются объектами первого класса, поэтому простая функция не может быть лямбдой.

 

Лямбда-функция в С++ - это анонимный функтор. Согласитесь, что функтор и функция - это разные вещи. Первый - это объект (первого класса в том числе), вторая просто код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...