将结构体转换为数组

Ras*_*lis 2 c++ arrays struct vector std

随着编程变得更加复杂,对结构数据执行操作的需求变得可见。是否有将结构类型转换为其成员数组的转换方法,以便:

struct FooDesc Foo{
    int num_Foo;
    int num_Bar;
    int GreenFoo;
};
Run Code Online (Sandbox Code Playgroud)

可以表示为:

int Bar[2];
Run Code Online (Sandbox Code Playgroud)

或者更好,动态为:

vector<int> Bar;
Run Code Online (Sandbox Code Playgroud)

目标是将数据结构转换或重新表示为可迭代形式,而不过度使用赋值运算符。

101*_*010 5

您可以使用未命名的structs 来创建一个混合体struct,其中它的成员可以被视为一个数组:

struct  Foo {
  union {
    struct {
      int x;
      int y;
      int z;
    };
    struct {
      int array[3];
    };
  };
};
Run Code Online (Sandbox Code Playgroud)

LIVE DEMO

但是请注意,unnamedstruct来自 C11 并且它不是标准的 C++ 功能。尽管 GCC 和 Clang 支持它作为扩展。