Jump to content

    

Есть ли возможность в наследованном классе изменить содержимое массива родительского класса

22 minutes ago, one_eight_seven said:

std::map

По моим исследованием эта полезная штука занимает ОЗУ, даже если объект объявлен с квалификатором const. Помню, собрал с ним проект для Cortex-M0 по неопытности. Удивился, когда увидел, что байт 80 из 8 кБ куда-то исчезли... Вроде бы не очень много, но это ведь крохотные МК. Им штучки из STL (в некоторых проектах очень даже полезные) нужно применять с осторожностью.

Share this post


Link to post
Share on other sites

Ну, тогда стоит ждать c++20, там обещают возможность использования виртуальных методов в качестве constexpr.
Правда, это всё-равно может потребовать явного указания размера для правильной работы, но можно будет создать ссылку на объект внутри класса без явного указания размера.

В том смысле, что для инициализации массива array<typename T, size_t S>, размер S всё-равно нужно будет указывать в явной форме, и автоматически он не вычислится (как и сейчас). А без явного указания std::size() и sizeof() с таким массивом работать не будут. Значит, нужен или терминатор, или какая-то структура, где данные о размере структуры будут храниться внутри объекта, а заполняться автоматически эта структура не может - нужен какой-то метод, который работает только в рантайме.

Edited by one_eight_seven

Share this post


Link to post
Share on other sites

Коллегил, всем огромное спасибо за помощь и желание помочь! Я подумал, и решил, что не буду мудрствовать, а сделаю банально и классически, в стиле си

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,
};

Затем указатель на массив и его размер передам в качестве аргумента в унаследованный класс. А в базовом определю виртуальные функции, которые будут работать с этим указателем. При необходимости, их можно будет перегрузить. Я думаю, мою задача можно решить как-то, как уже тут упомянули с помощью вариативных шаблонов, но мне это пока не под силу. Попробовав, я понял, что там не всё так просто. А есть ведь у меня и другие задачи, требующие решения. Я не могу позволить пока себе много времени на получение "просто красивого" решения. Возможно, в будущем оно придём само) Ещё раз всем благодарность за множество примеров кода, которые открыли мне понимание на некоторые вещи!!!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now