我能循环遍历C++类的(公共)属性吗?

3
我找到了关于C Structs和C#类的答案,但是在C++方面一无所获。 编辑:在C中是不可能的。 在C#中,可以使用GetProperties()方法。 上下文: 我有一个具有公共属性的C++类(比如一个带有X、Y、Z的点)。我想通过UDP将这些属性发送给Java客户端。我的想法是创建一个字节(char*)缓冲区,并将三个属性写入其中(我已经考虑了字节序问题)。
prepareForUdp(char * buffer)
 {
   int offset = 0;
   int offsetValue = 4;
   char tempBuffer[16];  

   memcpy( tempBuffer, &X_, sizeof(X_) );
   offset = offset + offsetValue;
   memcpy( tempBuffer + offset, &Y_, sizeof(Y_) );
   offset = offset + offsetValue;
   memcpy( tempBuffer + offset, &Z_, sizeof(Z_) );
   offset = offset + offsetValue;  

   memcpy( buffer, tempBuffer, sizeof(buffer) );
 }

我希望我的界面具有演化性,因为该点可能会获得第四维、第五维或第n维,我希望我的prepareForUdp()方法是(相对)通用的。

我的问题是:如何循环(或迭代)我的属性?


1
也许如果您发布了关于C结构体的“答案”,它可能会阐明您认为什么是答案。我无法理解您如何在C中解决它,而在C ++中却无法做到相同。 - Jamie
对不起,Jamie。C的答案是“你不能...”我会编辑我的第一篇帖子。 - Isaac Clarke
2个回答

6
在C++中没有反射机制。因此,答案是你做不到 :)

1
@Isaac:对于你想做的事情,没有。你无法以任何方式迭代类的单独成员。但是你可以遍历字节。 - Armen Tsirunyan
很有趣!你能给我指一篇文章或教程来做到这一点吗? - Isaac Clarke
1
@Isaac,要迭代字节,只需将对象的地址重新解释为unsigned char*,并迭代后者sizeof(yourObject)次。 - Armen Tsirunyan
谢谢你提醒我,我会自己找出最适合我情况的方法。我会尽快接受你的答案,谢谢! - Isaac Clarke

2

谢谢,这很有教育意义! - Isaac Clarke
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Mgetz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接