c++ 取结构体成员名称_c++,结构体成员的编码名称作为函数参数,如何实现

本文探讨了如何在C++中通过结构体成员的名称字符串来获取其对应的值。作者指出,由于offsetof宏不能接受动态参数,因此直接使用成员名称字符串来访问结构体成员存在困难。帖子中提出了一个需求,即设计一个函数,输入结构体指针和成员名称字符串,返回该成员的值。然而,由于C++的静态类型特性,实现这一功能并不直接,特别是在成员类型不确定的情况下。
摘要由CSDN通过智能技术生成

c++,结构体成员的编码名称作为函数参数,如何实现

(2012-04-10 02:03:34)

标签:

c

结构体

如何

杂谈

c++,结构体成员的编码名称作为函数参数,如何实现 本帖最后由 caohui8666 于 2011-01-30 18:31

编辑

先用例子说明我想问的问题:

typedef struct{

int aaa;

int bbb;

int ccc;

}test_stu;

int _fun(test_stu *_test, char *_str)

{

return 0;

}

int main()

{

test_stu test;

memset(&test, 0, sizeof(test_stu ));

test.aaa = 111;

test.bbb = 222;

test.ccc = 333;

int result = _fun(&test,

"aaa");

printf("result[%d]\n",

result);

return 0;

}

总体描述的意思是,一个结构体(这个结构体成员的个数有可能还会增加,比如再增加一个int

ddd),需要一个函数,给这个函数输入这个结构体的成员的变量名称,就能返回这个成员的取值。

如何实现?请求高手指导,在线等。

另外补充一点,offsetof是一个宏函数,第二个参数是成员的明细,不能是一个变量,无法最终实现需求。

我需要传给_fun函数一个字符串变量,变量值为“aaa”,然后返回aaa的取值即111;输入“bbb”,返回222;而不能写死的offsetof(test_stu

,

aaa).offsetof可以返回结构体成员的偏移,这样用首地址和这个偏移就可以计算出该成员的起始地址。但问题是成员的类型,如果能确定是一种类型,比如INT,那还是可以实现的,如果无法确定类型,就不好办了。

如果能确定类型的话(比如INT),可以这样写

int _fun(char *p, int a)

{

return *((int *)(p + a));

}

然后用的时候,比如

int result= _fun(&test, offsetof(test_stu, aaa));回复

2# liwangli1983

这个结构体的成员类型是不确定的,可能是各种类型,

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值