【问题标题】:Const struct initialization with custom elements in C++使用 C++ 中的自定义元素初始化 const 结构
【发布时间】:2019-04-22 15:25:25
【问题描述】:

我正在将一些 C 代码移植到 C++,并且我正在尝试用一些值初始化一个结构。 我希望将结构存储在闪存 (const) 中而不是 RAM 中,并且它的值是 typedef'd 元素。

原来我是这样的:

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

为了在 Flash 中实例化它们,我简单地做了以下操作:

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

我知道这种类型的初始化在 C++ 中是不允许的。如何在 C++ 中实现它?

【问题讨论】:

  • 在 C++20 中是允许的(有一些限制)。您需要旧标准版本的解决方案吗?

标签: c++ struct designated-initializer


【解决方案1】:

指定的初始化器不在 C++ 中(目前还没有,但请寻找 C++20)。所以你几乎用同样的方式做,但没有名字——参数的位置定义了它初始化的字段:

const structTypeA_t sA = {ONE,
                          TWO,
                          3
};

【讨论】:

    【解决方案2】:

    如果您总是需要使用相同的值进行初始化,那么您可以像这样定义结构:

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

    您现在可以在没有初始化程序的情况下实例化它:

    const structTypeA_t sA;
    

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 2014-05-25
      • 2012-03-30
      • 2013-01-17
      • 2015-01-28
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      相关资源
      最近更新 更多