haker_fox 60 5 октября, 2019 Опубликовано 5 октября, 2019 · Жалоба 22 minutes ago, one_eight_seven said: std::map По моим исследованием эта полезная штука занимает ОЗУ, даже если объект объявлен с квалификатором const. Помню, собрал с ним проект для Cortex-M0 по неопытности. Удивился, когда увидел, что байт 80 из 8 кБ куда-то исчезли... Вроде бы не очень много, но это ведь крохотные МК. Им штучки из STL (в некоторых проектах очень даже полезные) нужно применять с осторожностью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 5 октября, 2019 Опубликовано 5 октября, 2019 (изменено) · Жалоба Ну, тогда стоит ждать c++20, там обещают возможность использования виртуальных методов в качестве constexpr. Правда, это всё-равно может потребовать явного указания размера для правильной работы, но можно будет создать ссылку на объект внутри класса без явного указания размера. В том смысле, что для инициализации массива array<typename T, size_t S>, размер S всё-равно нужно будет указывать в явной форме, и автоматически он не вычислится (как и сейчас). А без явного указания std::size() и sizeof() с таким массивом работать не будут. Значит, нужен или терминатор, или какая-то структура, где данные о размере структуры будут храниться внутри объекта, а заполняться автоматически эта структура не может - нужен какой-то метод, который работает только в рантайме. Изменено 5 октября, 2019 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 5 октября, 2019 Опубликовано 5 октября, 2019 · Жалоба Коллегил, всем огромное спасибо за помощь и желание помочь! Я подумал, и решил, что не буду мудрствовать, а сделаю банально и классически, в стиле си static const FFWK::Drv::Uart uart1; static const FFWK::Drv::Uart uart2; static const FFWK::Drv::Uart uart3; static const FFWK::Drv::Uart uart4; static const FFWK::Drv::Base * const s_drvList[] = { &uart1, &uart2, &uart3, &uart4, }; Затем указатель на массив и его размер передам в качестве аргумента в унаследованный класс. А в базовом определю виртуальные функции, которые будут работать с этим указателем. При необходимости, их можно будет перегрузить. Я думаю, мою задача можно решить как-то, как уже тут упомянули с помощью вариативных шаблонов, но мне это пока не под силу. Попробовав, я понял, что там не всё так просто. А есть ведь у меня и другие задачи, требующие решения. Я не могу позволить пока себе много времени на получение "просто красивого" решения. Возможно, в будущем оно придём само) Ещё раз всем благодарность за множество примеров кода, которые открыли мне понимание на некоторые вещи!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться