排序版本:我有一个for循环,在每次迭代中我想访问一个结构的不同成员(按顺序)。这在C ++中是否可行?我记得当我在学校学习这类东西时可能会回来的事情,但我可能一直在考虑一种较低级别的语言/系统。
详细信息:这是我的结构:
struct meg_data_packet { /* decodes a meg data packet */
struct data_value channel0;
struct data_value channel1;
struct data_value channel2;
struct data_value channel3;
struct data_value channel4;
struct data_value channel5;
struct data_value channel6;
struct data_value channel7;
struct data_value channel8;
struct data_value channel9;
struct data_value channel10;
struct data_value channel11;
struct data_value channel12;
struct data_value channel13;
struct data_value channel14;
struct data_value channel15;
char reset_flag0;
char reset_flag1;
char reset_flag2;
char reset_flag3;
char reset_flag4;
char reset_flag5;
char reset_flag6;
char reset_flag7;
char reset_flag8;
char reset_flag9;
char reset_flag10;
char reset_flag11;
char reset_flag12;
char reset_flag13;
char reset_flag14;
char reset_flag15;
uint32_t sequence_number;
};
data_value是一个只包含uint32_t的简单结构。我希望能够以meg_data_packet[0]
获取channel0
,[1]
获取channel1
等类似方式访问这些成员。
答案 0 :(得分:3)
你可以使用这样的数组:
outputImage = imageRead('C:\abc\def\ghi.bmp');
或者更好的是struct meg_data_packet { /* decodes a meg data packet */
data_value channels[16];
char reset_flags[16];
uint32_t sequence_number;
};
std::array
访问以下元素:
struct meg_data_packet { /* decodes a meg data packet */
std::array<data_value, 16> channels;
std::array<char, 16> reset_flags;
uint32_t sequence_number;
};
答案 1 :(得分:2)
是的,这是可能的。使用offsetof
初始化指针偏移数组。然后将其添加到reinterpret_cast<char*>(&struct_var)
,将其转换为目标类型,然后你去...你有一个指向成员的指针,你可以按顺序迭代它们。
当然,您需要两个循环,一个用于data_values,另一个用于reset_flags。
我还应该注意,这不是你应该如何在C ++中做事。这是C方式。 C ++有更多,更好的提供。