![](/img/trans.png)
[英]How can I define different struct members for different template parameters?
[英]How can I access the members of a struct in a loop?
排序版本:我有一个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
等等。
编辑:哇,这些是一些快速答复。 我应该更清楚了。 由于无法初始化结构,因此无法使用数组。 它基本上只是现有数据结构的外观(实际上是u_char的数组,我正在从通过tcp套接字发送的系统中获取信息)。 我将旧的数据结构转换为该数据结构以利用它的结构,因为我需要访问u_char表示的实际值。
您可以使用如下数组:
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;
};
访问这样的元素:
meg_data_packet mdp =get_packet();
mdp.channels[0] = ... // access by index 0-15
是的,有可能。 使用offsetof
初始化指针偏移量数组。 然后将其添加到reinterpret_cast<char*>(&struct_var)
,将其reinterpret_cast<char*>(&struct_var)
转换为目标类型,然后就可以开始……您有一个指向该成员的指针,可以按顺序对其进行迭代。
当然,您将需要两个循环,一个循环用于data_values,一个循环用于reset_flags。
我还应该注意,这并不是您真正应该使用C ++进行操作的方式。 这就是C方式。 C ++提供了更多更好的功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.