如何枚举一个Class所有成员,并获得成员的类型及名称比如:
class
{
long t;
double x;
char m[12];
}A;A a;如何自动知道a的成员数目,类型,大小,成员名称,及赋值情况呢?VC调试的时候,通常编译器能实现上述功能,输入一个变量,自动获取类型,及成员类型、名称。
class
{
long t;
double x;
char m[12];
}A;A a;如何自动知道a的成员数目,类型,大小,成员名称,及赋值情况呢?VC调试的时候,通常编译器能实现上述功能,输入一个变量,自动获取类型,及成员类型、名称。
比如sizeof()就能知道类的大小;&a就能知道a的地址也就是第一个成员函数的地址,没有机制获得第N数据成员的指针呢,还有sizeof()获得类的大小本身就很神奇,不知道实现机制是怎么样的,能不能从它实现机制中洞察到一些本主题解决方案呢,还望高手继续赐教。对该主题深入讨论,谢谢!
这个是编译期间就获得的吧,并不是运行时获得的到了运行期,sizeof()就变成了具体的一个数。
在CLR C++里面同样适用
sizeof一点都不神奇,它只是一个运算符而已,而非一个函数。sizeof是编译时计算大小的,而不是运行时。
自定义类管理自己定义的类型替代全功能型的了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);
http://topic.csdn.net/u/20100721/20/b9008340-da3f-4045-958a-7622fc3401b4.html?seed=1752089830&r=67145918#r_67145918
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());