typedef void * (* CreateClass)(void);
class CClassFactory
{
public:
static CClassFactory & IntanceFactory();
public:
void * CreateObject(const std::string & className);
void RegistClass(const std::string & name, const CreateClass & method);
private:
std::map<std::string, CreateClass> m_classMap;
};
class CDynamicClass
{
public:
CDynamicClass(const std::string & name, const CreateClass & method)
{
CClassFactory::IntanceFactory().RegistClass(name, method);
}
};
#define DECLARE_CLASS(className)\ std::string className##Name;\ static CDynamicClass * className##Namedc; #define IMPLEMENT_CLASS(className)\ CDynamicClass * className::className##Namedc = new CDynamicClass(#className, className::Instance);
#define ACCESS_INTERFACE(classType, type, name, describe)\
public:\
std::string m_Describe##name = #describe;\
inline static void Set##name(CBaseClass * cp, void * value){\
classType * tp = (classType *)cp;\
tp->m_##name = *(type *)value;\
}\
inline type Get##name(void) const {\
return m_##name;\
}\
inline std::string Get##name##Describe(){ \
return m_Describe##name;\
}
#define ACCESS_REGISTER(name)\
m_propertyMap.insert({ #name, Set##name });
class CBaseClass
{
public:
CBaseClass() {}
virtual ~CBaseClass() {}
public:
std::map<std::string, SetValueProperty> m_propertyMap;
private:
};
class CHelloClass : public CBaseClass
{
public:
DECLARE_CLASS(CHelloClass);
ACCESS_INTERFACE(CHelloClass, int, Age, "年龄")
ACCESS_INTERFACE(CHelloClass, int, Sex, "性别")
public:
CHelloClass();
virtual ~CHelloClass();
public:
static void * Instance();
public:
virtual void RegistProperty( );
protected:
int m_Age = 0;
int m_Sex = 0;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CHelloClass * pVar = (CHelloClass*)CClassFactory::IntanceFactory().CreateObject("CHelloClass");
if (pVar)
{
int pAge = 2;
int pSex = 1;
pVar->m_propertyMap["Age"](pVar, &pAge);
pVar->m_propertyMap["Sex"](pVar, &pSex);
std::cout << pVar->GetAgeDescribe() << pVar->GetAge() << std::endl;
std::cout << pVar->GetSexDescribe() << pVar->GetSex() << std::endl;
}
return a.exec();
}
void DynamicObject::Deserialize()
{
tinyxml2::XMLDocument doc;
if (tinyxml2::XML_NO_ERROR == doc.LoadFile("D:\\example\\paint\\DynamicCreateObject\\test.xml"))
{
if (tinyxml2::XMLNode * rootNode = doc.FirstChildElement("Ojbectlist"))
{
const char * rootText = rootNode->ToElement()->Attribute("name");
tinyxml2::XMLElement * element = rootNode->FirstChildElement("Object");
while (element)
{
const char * objectName = element->Attribute("name");
tinyxml2::XMLElement * propertyElement = element->FirstChildElement("Property");
while (propertyElement)
{
const char * propertyName = propertyElement->Attribute("name");
const char * propertyValue = propertyElement->Attribute("value");
}
tinyxml2::XMLNode * nextNode = element->NextSibling();
if (nextNode == nullptr)
{
break;
}
element = nextNode->ToElement();
}
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有