Инициализация Const struct с пользовательскими элементами в C ++ - PullRequest
0 голосов
/ 22 апреля 2019

Я портирую код C на C ++ и пытаюсь инициализировать структуру с некоторыми значениями. Я хочу, чтобы структура сохранялась во flash (const), а не в RAM, а ее значения являются элементами typedef'd.

Изначально у меня было так:

typedef struct
{
    typeA_t elementA;
    typeB_t elementB;
    uint8_t elementC;
} structTypeA_t;

И чтобы создать их во флэш-памяти, я просто сделал следующее:

const structTypeA_t sA = {
    .elementA = ONE,
    .elementB = TWO,
    .elementC = 3
};

Я знаю, что этот тип инициализации не разрешен в C ++. Как я могу достичь этого в C ++?

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Назначенные инициализаторы отсутствуют в C ++ (пока, но ищите C ++ 20). Таким образом, вы делаете это почти так же, но без имен - позиция аргумента определяет поле, которое он инициализирует:

const structTypeA_t sA = {ONE,
                          TWO,
                          3
};
0 голосов
/ 22 апреля 2019

Если вам всегда нужно инициализировать одними и теми же значениями, вы можете просто определить структуру следующим образом:

struct structTypeA_t
{
    typeA_t elementA = ONE;
    typeB_t elementB = TWO;
    uint8_t elementC = 3;
};

Теперь вы можете создать ее экземпляр без инициализатора:

const structTypeA_t sA;
...