Qt程式設計 通過反射機制實現類名資訊動態建立物件技術

2021-10-09 16:44:18 字數 1854 閱讀 2144

根據類名資訊動態建立物件技術,不僅可以降低**的耦合度和複雜性,還可以實現指令碼化程式設計技術,動態解析建立物件,提高記憶體利用率和應用程式靈活性。

反射機制框架如下:

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來獲取配置檔案中的座標等資訊。有沒有更簡單的方法呢,或者我只想簡單的用例項變數的變數名做為...