Jump to content

    
Sign in to follow this  
haker_fox

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

Recommended Posts

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this