【发布时间】:2019-10-25 13:27:05
【问题描述】:
在迁移到 C++ 时,我需要某个似乎已被弃用的函数。sorry, unimplemented: non-trivial designated initializers not supported
在 C++ 中为内存约束系统实现以下数据存储系统的正确方法是什么?
typedef union union_t {
float f;
int i;
} arg;
typedef struct type_t {
int a;
arg b;
int d;
} element;
const element list[] = {
{
.a = 1,
.b = { .f = 3.141519f },
.d = 6
},
{
.a = 3,
.b = { .i = 1 },
}
};
通常建议使用std:map 或std:vector。这是合适的,但是list 是不可变的,并且必须能够编译和链接到特定的闪存块。两者似乎都不适合这个目的。
我能达到的最高版本是 ARM Compiler 6,也就是 C++14。
【问题讨论】:
-
这是 C++20 中的一个新特性,它没有被“弃用”(这意味着一个旧特性将被删除)
-
现在,您需要使用标准 C 才能使用指定的初始化程序。此外,在任何一种语言中创建“变体”类型联合都是一个非常糟糕的主意。我想不出你为什么会在 C++ 中使用
union。 -
不,std::map 和 std::vector 不适合,因为这是嵌入式系统,而不是 PC。使用 std::array 或 POD 类型。 “...编译并链接到特定的闪存块。两者似乎都不适合该目的。”整个 C++ 语言都不适合这个目的。
标签: c++ struct embedded designated-initializer initializing