C++中利用类名动态创建对象【反射写法】

  • 首先定义的类A、B等
    类A、B均公有派生于CObject
    类A【B】的定义体中添加DECLARE_SERIAL(A)【B】,类A【B】的源文件中的函数定义体外添加IMPLEMENT_SERIAL(A,CObject,1)【(B,CObject,2)】
  • 动态创建对象的函数【#include待动态创建的类所在的头文件】
    类A、B均公有派生于CObject
    TCHAR *sectionName = _T("AInfo");
    TCHAR *className = _T("ClassName");
    WCHAR ClassName[256];
    ::GetPrivateProfileString(sectionName, className, _T(""), ClassName, 256, _T("C:\\MyConfig.ini"));
    CRuntimeClass *pclass = CRuntimeClass::FromName(ClassName);
    CObject *p = pclass->CreateObject();
    ((A*)p)->show();
    delete p;

其中的MyConfig.ini文件中对类名及其标识符做了说明:

[ClassInfo]
ClassName="CStudentDTO"
[DllInfo]
ClassName = "DaoDllName"
[AInfo]
ClassName="A"
[BInfo]
ClassName="B"

你可能感兴趣的:(C++)