社区
硬件/系统
帖子详情
高分求解---如何枚举一个Class所有成员,并获得成员的类型及名称
xcs99321
2010-07-17 01:49:06
如何枚举一个Class所有成员,并获得成员的类型及名称
比如:
class
{
long t;
double x;
char m[12];
}A;
A a;
如何自动知道a的成员数目,类型,大小,成员名称,及赋值情况呢?
VC调试的时候,通常编译器能实现上述功能,输入一个变量,自动获取类型,及成员类型、名称。
...全文
345
21
打赏
收藏
高分求解---如何枚举一个Class所有成员,并获得成员的类型及名称
如何枚举一个Class所有成员,并获得成员的类型及名称 比如: class { long t; double x; char m[12]; }A; A a; 如何自动知道a的成员数目,类型,大小,成员名称,及赋值情况呢? VC调试的时候,通常编译器能实现上述功能,输入一个变量,自动获取类型,及成员类型、名称。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xcs99321
2010-07-21
打赏
举报
回复
如何把自定义结构的数据存储到COleVariant中呢
struct ST
{
int a;
long b;
float c;
char* psz;
}
=>
ST A;
COleVariant m1(ST.a);
COleVariant m2(ST.b);
COleVariant m3(ST.c);
COleVariant m4(ST.psz);
COleSafeArray arr;
DWORD numElements[] = {4};
arr.Create(VT_VARIANT, 1, numElements);
long index = 0;
arr.PutElement(&index,m1);
index = 1;
arr.PutElement(&index,m2);
index = 2;
arr.PutElement(&index,m3);
index = 3;
arr.PutElement(&index,psz);
//将数组的值复给COleVariant对象
COleVariant var(arr.Detach());
xcs99321
2010-07-21
打赏
举报
回复
有的另一个帖子有高手回复,有些智慧的火花,希望抛砖引玉,在这个帖子转一下
http://topic.csdn.net/u/20100721/20/b9008340-da3f-4045-958a-7622fc3401b4.html?seed=1752089830&r=67145918#r_67145918
xcs99321
2010-07-21
打赏
举报
回复
由于工程进度问题,只能暂时考虑放弃学习CLI C++反射机制了,
自定义类管理自己定义的类型替代全功能型的了
class CGeneralType : public CObject
{
public:
CGeneralType();
virtual ~CGeneralType();
public:
char ItemName[64];
VARTYPE ItemType;
COleVariant ItemValue;
char ItemInfo[64];
char ItemTypeS[64];
void *ItemPoint;
public:
};
class CGTypeArrayManage : public CObject
{
public:
CGTypeArrayManage();
virtual ~CGTypeArrayManage();
public:
CArray<CGeneralType*,CGeneralType*> m_GTypeArray;
public:
BOOL ClearElement(BOOL DeleteMem=TRUE);
BOOL AddElement(CString ItemName,VARTYPE ItemType,COleVariant ItemValue,CString ItemInfo,void *ItemPoint);
BOOL AddElement(CString ItemName,COleVariant ItemValue,void *ItemPoint);
CGeneralType* GetAt(long index);
long GetSize();
CGeneralType* FindElement(CString ItemName);
};
具体使用:
CGTypeArrayManage m_TypeArray;
CString m1="sdfa";
long k=100;
double pi=3.14;
m_TypeArray.AddElement("m1",m1,(void*)&m1);
m_TypeArray.AddElement("k",k,(void*)&k);
m_TypeArray.AddElement("pi",pi,(void*)&pi);
Dobzhansky
2010-07-20
打赏
举报
回复
学习 VCF 中...
库内建反射机制
一名程序员
2010-07-20
打赏
举报
回复
楼主只能自己写一些接口、宏或类来实现了。参考CLI C++的反射实现原理。
Eleven
2010-07-19
打赏
举报
回复
[Quote=引用 10 楼 xcs99321 的回复:]
我总感觉有一定的机制可以实现:
比如sizeof()就能知道类的大小;&a就能知道a的地址也就是第一个成员函数的地址,没有机制获得第N数据成员的指针呢,
还有sizeof()获得类的大小本身就很神奇,不知道实现机制是怎么样的,能不能从它实现机制中洞察到一些本主题解决方案呢,还望高手继续赐教。
对该主题深入讨论,谢谢!
[/Quote]
有个offsetof宏可以得到结构体成员距离结构体开始处的偏移量(字节为单位)
xcs99321
2010-07-19
打赏
举报
回复
从C++类在内存中,数据成员与数据成员有没有分界没有标识机制呢,数据成员与成员函数在内存存储有区别吗?这些信息都是编译时期用的吗,运行期都退化成C语言内核了吗?
要是类在内存结构中有标识信息,本主题就有解,要是没有标识,本主题就没有解,不需要讨论了,
请高手明示。
magic7004
2010-07-19
打赏
举报
回复
[Quote=引用 10 楼 xcs99321 的回复:]
我总感觉有一定的机制可以实现:
比如sizeof()就能知道类的大小;&a就能知道a的地址也就是第一个成员函数的地址,没有机制获得第N数据成员的指针呢,
还有sizeof()获得类的大小本身就很神奇,不知道实现机制是怎么样的,能不能从它实现机制中洞察到一些本主题解决方案呢,还望高手继续赐教。
对该主题深入讨论,谢谢!
[/Quote]
sizeof一点都不神奇,它只是一个运算符而已,而非一个函数。sizeof是编译时计算大小的,而不是运行时。
teleinfor
2010-07-19
打赏
举报
回复
类A添加一个接口支持你的遍历吧,呵呵。不过这个A必须你自己写的。
MoXiaoRab
2010-07-19
打赏
举报
回复
[Quote=引用 9 楼 xcs99321 的回复:]
看来只能自己维护一个自己定义的类具备这个特性了,也就仿RTTI机制。
不过jennyvenus这位大师提到"C++非托管里没有反射机制",也就是说C++托管里反射机制可以实现类似功能?
有没有进一步资料,我学习一下。
[/Quote]
你去搜索下:C# 反射。
在CLR C++里面同样适用
Icedmilk
2010-07-19
打赏
举报
回复
[Quote=引用 10 楼 xcs99321 的回复:]
sizeof()获得类的大小本身就很神奇
[/Quote]
这个是编译期间就获得的吧,并不是运行时获得的
到了运行期,sizeof()就变成了具体的一个数。
xcs99321
2010-07-19
打赏
举报
回复
我总感觉有一定的机制可以实现:
比如sizeof()就能知道类的大小;&a就能知道a的地址也就是第一个成员函数的地址,没有机制获得第N数据成员的指针呢,
还有sizeof()获得类的大小本身就很神奇,不知道实现机制是怎么样的,能不能从它实现机制中洞察到一些本主题解决方案呢,还望高手继续赐教。
对该主题深入讨论,谢谢!
xcs99321
2010-07-19
打赏
举报
回复
看来只能自己维护一个自己定义的类具备这个特性了,也就仿RTTI机制。
不过jennyvenus这位大师提到"C++非托管里没有反射机制",也就是说C++托管里反射机制可以实现类似功能?
有没有进一步资料,我学习一下。
hztj2005
2010-07-18
打赏
举报
回复
可能你得模仿RTTI,自己建一个结构,记录某个类的成员和函数了,并且给每个类添加一个static 变量,根据该变量判断各对象属于哪个类,然后找到相应的结构,自己遍历了。
iqyely
2010-07-18
打赏
举报
回复
来关注下。
副组长
2010-07-17
打赏
举报
回复
看来这个可是比不上COM接口了。
Csuxiaowu
2010-07-17
打赏
举报
回复
学习 学习
MoXiaoRab
2010-07-17
打赏
举报
回复
C++非托管里没有反射机制。
jameshooo
2010-07-17
打赏
举报
回复
DEBUG版本会生成符号文件,所以调试时能看到所有变量和类成员。RELEASE版本虽然也能生成符号文件,但通常只能定位到代码行,变量值不再可靠,这是链接器优化后的结果,内存布局跟符号文件的描述不能匹配。
Icedmilk
2010-07-17
打赏
举报
回复
编译之后就只有地址了。
调试的时候,内存里被填充了很多调试数据,你说的东西都是这些调试数据
Release的时候就没了
加载更多回复(1)
大津法IDL版.7z
通过这个压缩包,用户可以学习如何在IDL环境中应用大津法进行图像二值化,对于研究和处理大量遥感图像或其他
类型
图像的科研工作者来说,这是
一个
非常实用的工具。同时,这也提供了
一个
了解和实践IDL编程的机会,...
二维主分量分析(2DPCA) 完整的2DPCA人脸识别
- **图像处理方式**:在PCA中,图像需要被展平为
一个
长向量,这可能导致原始空间结构信息的丢失。而在2DPCA中,图像可以直接作为矩阵进行处理,保留了更多的空间信息。 - **计算复杂度**:由于2DPCA处理的是图像矩阵...
论文阅读-8-Survey on deep learning with
class
imbalance
使用不平衡数据进行有效分类是
一个
重要的研究领域,因为在许多现实应用中,例如欺诈检测和癌症检测,高等级不平衡是固有的。此外,高度不平衡的数据带来了额外的困难,因为大多数学习器会表现出对多数类的偏见,在...
python123
求解
平均值_Python
求解
-黑洞
题目
求解
字符串数字组合import itertoolss = input()n = int(input())numStr = ''.join(sorted(set(filter(str.isdigit, s)), reverse = True))for s in itertools.combinations(numStr, n):print(''.join(list(s)))...
CString内存错误,
高分
求解
!
Information info; info.m_csName="韩巧珍"; info.m_csID="342222198805060525";...
class
Information{ public: //姓名 CString m_csName; //户别 CString m_csHouseType; //户主姓名 CString m_c
硬件/系统
2,644
社区成员
17,232
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章