- #include <iostream>
- #include "karmarama.hpp"
- #include "pattern/kar_reflection.hpp"
- using namespace std;
- class TKar_Widget:public TKar_Persistent
- {
- protected:
- unsigned int m_Width;
- unsigned int m_Height;
- public:
- void SetWidth(unsigned int Width){m_Width=Width;}
- void SetHeight(unsigned int Height){m_Height=Height;}
- unsigned int GetWidth(){return m_Width;}
- unsigned int GetHeight(){return m_Height;}
- BEGIN_DESCRIPTION_CLASS(TKar_Widget)
- PROPERTY("Width",KAR_UINT,&TKar_Widget::SetWidth,&TKar_Widget::GetWidth)
- PROPERTY("Height",KAR_UINT,&TKar_Widget::SetHeight,&TKar_Widget::GetHeight)
- END_DESCRIPTION_CLASS()
- };
- REGISTER_DESCRIPTION_CLASS(TKar_Widget,"TKar_Widget")
- class TKar_Label:public TKar_Widget
- {
- protected:
- string m_Caption;
- public:
- void SetCaption(string Caption){m_Caption=Caption;}
- string GetCaption(){return m_Caption;}
- BEGIN_DESCRIPTION_CLASS(TKar_Label)
- PROPERTY("Caption",KAR_STRING,&TKar_Label::SetCaption,&TKar_Label::GetCaption)
- END_DESCRIPTION_CLASS()
- };
- REGISTER_DESCRIPTION_CLASS(TKar_Label,"TKar_Label")
- int main()
- {
- TKar_ReflectionClassManager& m=TKar_ReflectionClassManager::GetInstance();
- if (m.Classes.size()>0)
- for (unsigned int i=0;i<m.Classes.size();i++)
- {
- cout<<m.Classes[i]->GetName()<<endl;
- if (m.Classes[i]->Properties.size()>0)
- for (unsigned int j=0;j<m.Classes[i]->Properties.size();j++)
- cout<<">"<<m.Classes[i]->Properties[j]->GetName()<<":"<<m.Classes[i]->Properties[j]->GetType()->GetName()<<endl;
- TKar_Persistent* obj=m.Classes[i]->CreateInstance();
- cout<<"object name:"<<obj->GetClassName()<<endl;
- }
- TKar_Persistent* obj=m.Classes[1]->CreateInstance();
- obj->SetValue<unsigned int>(0,5);
- cout<<obj->GetValue<unsigned int>(0)<<endl;
- TKar_Widget* w=new TKar_Widget;
- w->SetValue<unsigned int>("Height",5);
- cout<<w->GetValue<unsigned int>("Height")<<endl;
- }