ViKo 1 13 января, 2020 Опубликовано 13 января, 2020 · Жалоба template <bool ... rp> static void reset() { getGpio()->BSRR = (... | (rp << (uint(PN.bitn) + 16))); } template <bool ... sp> static void set() { getGpio()->BSRR = (... | (sp << uint(PN.bitn))); } Это компилируется, как надо. template <bool ... rp, bool ... sp> static void res_set() { getGpio()->BSRR = ((rp << (uint(PN.bitn) + 16)) | ...) | ((sp << uint(PN.bitn)) | ...); } Это даёт ошибку. Не различает параметры rp и sp. Они же подряд записаны при создании функции. Как побороть? Наверное, надо задать для каждого пина состояние 0 или 1, и кидать единицы в нужную часть регистра BSRR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 января, 2020 Опубликовано 13 января, 2020 · Жалоба Сделал. template <bool ... st> static void res_set() { getGpio()->BSRR = (... | (1 << (uint(PN.bitn) + !st * 16))); } Предыдущие две функции выкину, чтобы не путали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 января, 2020 Опубликовано 14 января, 2020 · Жалоба Типа, написал. Объединил полный порт и частичный в один класс. Есть функции для работы с полным портом, есть с частью по маске. От конструктора отказался, конфигурирую ноги функцией. Прикол, в проверочной программе остался вызов конструктора Port(); Так на него компилятор даже не заикнулся. Видимо, подразумевается пустой конструктор по умолчанию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 14 января, 2020 Опубликовано 14 января, 2020 · Жалоба Ну, аминь :-) А конструктор всегда есть, даже если не объявлен. По умолчанию он тривиальный просто. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 февраля, 2020 Опубликовано 10 февраля, 2020 · Жалоба Еще мелкий вопросик всплыл. Шаблон нужно размещать в заголовочном файле hpp. Но тогда надо лазить по всему определению класса, чтобы найти, какие функции у него есть. Как тут делать? Класс описать в начале файла hpp, где показать только объявления функций, а открытые функции отдельно дальше определять в том же файле? И закрытые функции также отдельно определять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 10 февраля, 2020 Опубликовано 10 февраля, 2020 · Жалоба 1 час назад, ViKo сказал: Класс описать в начале файла hpp, где показать только объявления функций, а открытые функции отдельно дальше определять в том же файле? Да, можно так. Тогда интерфейс класса будет виден яснее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба Хочу переписать bit-band манипуляции в виде шаблона класса. Наткнулся на такое.http://micro-os-plus.sourceforge.net/doc/BitBand_8h_source.html Вопрос. Почему шаблон задан не перед названием класса, а перед его функциями? Он же одинаковый. Это что-то меняет, улучшает? Почему так не сделали: template<typename A_T>class BitBand { … } И непонятно, почему они адрес переменной задали в виде параметра шаблона, а номер бита постеснялись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба Что-то я туплю. Адрес переменной - это константа? То есть, могу ли я в шаблоне задать параметр - адрес переменной? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 23 минуты назад, ViKo сказал: Адрес переменной - это константа? Да. Он не меняется в течении всего времени выполнения программы. 23 минуты назад, ViKo сказал: То есть, могу ли я в шаблоне задать параметр - адрес переменной? Увы, нет. Потому что при следующем запуске в "больших" машинах программа может быть загружена в другое место и адрес переменной будет другим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться