结构数组的嵌入式 C++ 静态初始化
Embedded C++ static initialization of struct arrays
在迁移到 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
是不可变的,必须能够编译和 link 到特定的闪存块。两者似乎都不适合这个目的。
我能达到的最高是ARM Compiler 6,也就是C++14。
您展示的方式几乎正确地符合即将到来的 C++20 标准。只有 .d
也必须初始化。这是我建议使用的吗?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0329r4.pdf
要在 C++14 中处理这个问题,您必须明确地初始化它:
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 },
0
}
};
在迁移到 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
是不可变的,必须能够编译和 link 到特定的闪存块。两者似乎都不适合这个目的。
我能达到的最高是ARM Compiler 6,也就是C++14。
您展示的方式几乎正确地符合即将到来的 C++20 标准。只有 .d
也必须初始化。这是我建议使用的吗?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0329r4.pdf
要在 C++14 中处理这个问题,您必须明确地初始化它:
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 },
0
}
};