C++中,是否可以循环访问一个结构体的各个域(每个域的类型和大小不一定相同)

Jeking217 2012-04-29 10:48:39
虽然这个问题有点傻帽,但是像java中有反射机制,可以很方便的做到,可对于C++中,是否可能实现类型数组一样,采用下标访问一个域【住:结构体的每个域类型不一定相同】
如一个结构体:
typedef struct _ITEM{
string uName;
int age;
float weight;
float height;
String sex;
}ITEM,*PITEM;
是否可以实现如下访问:ITEM[0] 就是范围uName,ITEM[1]就可以获得age,ITEM[2]可以获得weight ....
当然,直接这样访问是不行的,有没有方法可以实现这样访问呢??哪位C++牛人指点迷津,必然重谢....
...全文
355 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
纸箱猪 2012-05-02
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 的回复:]

重载[] +末班能够实现,不过每个新的结构就有新重载这点很麻烦,也没必要这样处理。
[/Quote]

用重载[]操作符的方式固然是可以,但是不仅仅每个新的结构体都需要定义自己的重载,还需要共同继承一个基类,并将[]操作符定义为虚函数。
e3internet 2012-05-01
  • 打赏
  • 举报
回复
重载[] +末班能够实现,不过每个新的结构就有新重载这点很麻烦,也没必要这样处理。
bsnry 2012-04-30
  • 打赏
  • 举报
回复


楼主在吗?


你用指针演示给我看看,好吗,菜鸟不懂啊??






Jeking217 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

没有。。。

这个的确是反射机制提供的。
[/Quote]

好怀念java的反射机制!!
Jeking217 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

全部用 指针.
然后,你懂的
[/Quote]

全部用指针当然可以解决这个问题了!可,这样岂不是很麻烦!!呵呵
Jeking217 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]

那就混合语言编程!
在C++玩反射,基本是事倍功半。
[/Quote]

我想,也不尽然吧,要是把反射机制给搭建起来,以后使用就方便了!当然了,希望搭建好的反射机制不会影响效率问题,呵呵!
Jeking217 2012-04-30
  • 打赏
  • 举报
回复
谢谢各位达人的指点,我的毕业设计时间紧迫,没时间研究了!只好老老实实做了,非常感谢各位的帮忙!不过,我还真想琢磨一下C++如何实现反射。我还想讨论一下这帖子,等过些时间会给大家打分!
Jeking217 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

楼主如果要了解C++的反射,可以去看看RTTI。
[/Quote]

这个好像也是java反射的前身,要研究能用还真来不及了!我在做毕业设计,时间紧迫!看来只好老老实实敲代码了,呵呵!!
taodm 2012-04-30
  • 打赏
  • 举报
回复
那就混合语言编程!
在C++玩反射,基本是事倍功半。
Jeking217 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]

不要带了java的想法来学C++。在C++里,你不需要反射。
[/Quote]

话是这么说了!在很多场合使用反射机制,可以事半功倍,不是么?
taodm 2012-04-30
  • 打赏
  • 举报
回复
不要带了java的想法来学C++。在C++里,你不需要反射。
pathuang68 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:

全部用 指针.
然后,你懂的


全部用指针当然可以解决这个问题了!可,这样岂不是很麻烦!!呵呵
[/Quote]

全部用指针应该也解决不了问题,除非你知道各个域的指针的数据类型。
pathuang68 2012-04-30
  • 打赏
  • 举报
回复
楼主如果要了解C++的反射,可以去看看RTTI。
大尾巴猫 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
引用 6 楼 的回复:

引用楼主 的回复:
虽然这个问题有点傻帽,但是像java中有反射机制,可以很方便的做到,可对于C++中,是否可能实现类型数组一样,采用下标访问一个域【住:结构体的每个域类型不一定相同】
如一个结构体:
typedef struct _ITEM{
string uName;
int age;
float weight;
float height;
Str……
[/Quote]

只是循环输出这个结构每个域的内容不很难吧。
做个结构的输出函数,或者干脆重载<<操作符。
要对结构有很多复杂的操作,设计成类更好一点。
Jeking217 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 13 楼 的回复:

引用 11 楼 的回复:

c++, 反射, 看 mfc ...


C++的反射么?我没接触过,网上也找了很多资料一直没有进展!
MFC里面有反射的支持吗,可以指点一下不??


这论坛里面也有好些 老帖吧 “ c++ 反射 ” ,稍微变通一下,稍微麻烦一点的代码,实现你的要求,不难...当然,不能像java那么方便罢了
[/Quote]

谢谢!!
CandPointer 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 11 楼 的回复:

c++, 反射, 看 mfc ...


C++的反射么?我没接触过,网上也找了很多资料一直没有进展!
MFC里面有反射的支持吗,可以指点一下不??
[/Quote]

这论坛里面也有好些 老帖吧 “ c++ 反射 ” ,稍微变通一下,稍微麻烦一点的代码,实现你的要求,不难...当然,不能像java那么方便罢了
Jeking217 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

c++, 反射, 看 mfc ...
[/Quote]

C++的反射么?我没接触过,网上也找了很多资料一直没有进展!
MFC里面有反射的支持吗,可以指点一下不??
Jeking217 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

莫非要用模板。
[/Quote]

模板么??这个不知道行不行,可以试试看!!这位兄台,是否也可以帮帮忙呢!
要是可以实现这样的功能,岂不是很方便么!如果一个结构体有50个域,要进行输出岂不是很麻烦!!
CandPointer 2012-04-30
  • 打赏
  • 举报
回复
c++, 反射, 看 mfc ...

Jeking217 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用楼主 的回复:
虽然这个问题有点傻帽,但是像java中有反射机制,可以很方便的做到,可对于C++中,是否可能实现类型数组一样,采用下标访问一个域【住:结构体的每个域类型不一定相同】
如一个结构体:
typedef struct _ITEM{
string uName;
int age;
float weight;
float height;
String sex;
……
……
[/Quote]

我就想这样通过下标获得每个域的内容,如果能这样不是很方便么,比如我们可以循环输出这个结构体的内容等等!
加载更多回复(6)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧