根據類名資訊動態建立物件技術,不僅可以降低**的耦合度和複雜性,還可以實現指令碼化程式設計技術,動態解析建立物件,提高記憶體利用率和應用程式靈活性。
反射機制框架如下:
reflect類宣告如下:
typedef qwidget*
(*constructor)
(qwidget* parent)
;class
reflect};
//巨集方法宣告類
#define declare_widget_reflect(class_name) \
class class_name##helper; \
extern class_name##helper class_name##helper; \
//巨集方法註冊類
#define impl_widget_reflect(class_name) \
class class_name##helper \
static qwidget* createobjectfunc(qwidget* parent) \
}; \
class_name##helper class_name##helper; \
reflect實現如下
reflect::
reflect()
void reflect::
registerclass
(const qstring& classname, constructor constructor)
qwidget *reflect::
createwidgetfactory
(qwidget* parent,
const qstring& classname)
return
nullptr;}
qwidget *reflect::
reflect
(qwidget* parent,
const qstring& classname)
測試用例類註冊:
form類宣告:
#include
#include
"reflect.h"
class
form
:public qlabel
;declare_widget_reflect
(form)
form實現:
#include
"form.h"
form::
form
(qwidget *parent)
:qlabel
(parent)
form::
~form()
impl_widget_reflect
(form)
測試用例使用
#include
"mainwindow.h"
#include
"ui_mainwindow.h"
#include
"reflect.h"
mainwindow::
mainwindow
(qwidget *parent)
:qmainwindow
(parent),ui
(new ui::mainwindow)
mainwindow::
~mainwindow()
C 反射 通過類名建立類例項
反射 其實就是利用程式集的元資料資訊。反射可以有很多方法,編寫程式時請先導入 system.reflection 命名空間。2 若要反射當前專案中的類 即當前專案已經引用它了 可以為 3 也可以為 參考 反射幫助類 public static class reflectionhelper 建立物件例...
Qt通過類名建立類例項
qobject的子類都有乙個staticmetaobject靜態成員變數,可通過staticmetaobject.newinstance 來建立這個類的例項。如果我們用qmap將類名和這個類的staticmetaobject成員變數對映起來,就可以實現通過類名建立類物件 class dialog 繼...
iOS 之通過反射機制獲得變數名
專案有的時候,會遇到一些特殊的處理,想要根據乙個例項的引用,獲取這個例項在 中的名稱。比如在處理view的座標的時候,我們將uiview的座標資訊配置到plist檔案中,我們可以設定乙個key,再通過這個key來獲取配置檔案中的座標等資訊。有沒有更簡單的方法呢,或者我只想簡單的用例項變數的變數名做為...