项目中碰到一个问题,如题,以下是实现的思想:
#include <stdio.h>
#include <string.h>
// 第一个儿子的属性
typedef struct stInfo
{
int m_iId;
}*PSTInfo;
// 第二个儿子的属性
typedef struct stInfo2
{
int m_iId;
char m_char;
}*PSTInfo2;
template <typename T>
class IObj
{
public:
virtual void SetInfo(const T* pInfo) = 0;
virtual long GetInfo(T* pInfo) = 0;
};
template <typename T>
class Obj : public IObj<typename T>
{
public:
virtual void SetInfo(const T* pInfo)
{
memcpy(&m_TInfo, pInfo, sizeof(T));
}
virtual long GetInfo(T* pInfo)
{
memcpy(pInfo, &m_TInfo, sizeof(T));
return 0;
}
private:
T m_TInfo;
};
class ObjChild : public Obj<stInfo>
{
public:
/*
virtual void SetInfo(PSTInfo pstInfo)
{
memcpy();
}
virtual long GetInfo(PSTInfo pInfo)
{
}
*/
};
class ObjChild2 : public Obj<stInfo2>
{
public:
/*
virtual void SetInfo(PSTInfo2 pstInfo2)
{
}
virtual long GetInfo(PSTInfo2 pstInfo2)
{
}
*/
};
int main()
{
stInfo infoIn, infoOut;
stInfo2 info2In, info2Out;
ObjChild obj;
ObjChild2 obj2;
infoIn.m_iId = 10;
obj.SetInfo(&infoIn);
obj.GetInfo(&infoOut);
printf("infoOut:m_iId:%d\r\n", infoOut.m_iId);
info2In.m_iId = 20;
obj2.SetInfo(&info2In);
obj2.GetInfo(&info2Out);
printf("info2Out:m_iId:%d\r\n", info2Out.m_iId);
return 0;
}