有没有办法得到一个结构体的成员变量名字???

TAL_King 2005-11-23 09:51:46
像Watch那样,那看到成员的名字,还能得到其值,可以做到不?
...全文
1689 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kinker 2005-11-26
  • 打赏
  • 举报
回复
找到了一个办法,使用宏可以实现,不用使用RUNTIME什么的

#define GETVARNAME(var,namebuf) strcpy(namebuf,#var)

注意的是namebuf要有足够的空间哦
如果要获取值的话可以再加上一个变量
#define GETVARNAME(var,namebuf,value ) strcpy( (namebuf),#var);value = var

当然你的value,var的类型要是一样的。

题外话:
给我点分吧~~~~~~~~~~~~
TAL_King 2005-11-23
  • 打赏
  • 举报
回复
现在我们用的一个东东,它是这样的
这样以后,就可以用一个CsaMscSerialize对象将其序列化成为一个XML文件,并且TagName就是成员变量的名字,根就是这个struct的名字,它是怎么做到的啊?哪位大虾来讲个思路吧。
说明:G()是用来传通用类型,C()是自定义类型,GAL/CAL是数组。
/*--------------------------------------------------------------
* Classes to be serialized
*------------------------------------------------------------*/
struct SimpleStruct {
SimpleStruct(void) { simpleStructShort = 0; }
~SimpleStruct(void) { }
DECLARE_MSC(SimpleStruct);

unsigned short simpleStructShort;
};
#define Simple_XPORT G(simpleStructShort)

class ClassToBeSerialized {
public:
ClassToBeSerialized(void) : myInt(0), myIntA_l(0), myIntALen(0), mySim() {
memset(&myTString[0], 0, sizeof(myTString));
}
~ClassToBeSerialized(void) {
if (myIntA_l != 0) {
MSC_REMOVE_INSTANCE(myIntA_l);
myIntA_l = 0;
}

DECLARE_MSC(ClassToBeSerialized);

private:

// data types to serialize
int myInt; // scalar
int *myIntA_l; // pointer with implicit allocation (using length specifier)
unsigned long myIntALen; // length specifier for myIntA_l
TCHAR myTString[64]; // NULL terminated UNICODE string
SimpleStruct mySim; // scalar struct
};
#define CLASSTOBESERIALIZED_XTR G(myInt) GAL(myIntA_l,myIntALen) GS(myTString) C(mySim)


IMPLEMENT_CF_MSC (ClassToBeSerialized, CLASSTOBESERIALIZED_XTR);
IMPLEMENT_CF_MSC (SimpleStruct, Simple_XPORT);

thisisll 2005-11-23
  • 打赏
  • 举报
回复
深入浅出MFC中讲了类似你的情况
他是把类的名字拿出来
用的是宏RUNTIME什么的
记不大清了
你可以去看看,也许能帮上忙
jcqstc 2005-11-23
  • 打赏
  • 举报
回复
你想在什么情况下获得结构体成员变量的名字?编译好的那不可能。工程中那就直接去看咯。
kinker 2005-11-23
  • 打赏
  • 举报
回复
估计比较难,wacth窗口是编辑器获取的变量名字,当程序编译以后,使用的并不是我们给的变量名,而已寄存器等等,所以获取变量名几乎是不可能。

watch是获取自己内部的内容,当然是可以的。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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