Qt反射機制實現(xiàn),通過類名創(chuàng)建對象
瀏覽:3920
版權(quán)聲明:本文為知乎作者「Qt開發(fā)編程」的原創(chuàng)文章,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
概述
反射的作用
-
獲取類型的信息,包括屬性、方法 -
動態(tài)調(diào)用方法 -
動態(tài)構(gòu)造對象 -
從程序集中獲得類型
反射的缺點
反射的使用場景
如何實現(xiàn)
template<typename L> //用于反射傳父類參數(shù)class CReflectClass{public://首先要注冊創(chuàng)建的類template<typename T>static void registerClass(){//&constructorHelper<T>其實是獲取創(chuàng)建的函數(shù)指針,核心功能。constructors().insert(T::staticMetaObject.className(), &constructorHelper<T>);}static QObject *createObject(const QByteArray& className,L* parent = nullptr){Constructor constructor = constructors().value(className);if (constructor == nullptr ){return nullptr;}return (*constructor)(parent);//執(zhí)行new T函數(shù),創(chuàng)建對應(yīng)實例}private:typedef QObject *(*Constructor)(L* parent);template<typename T>static QObject *constructorHelper(L* parent){if(parent)return new T(parent);else {return new T();}}static QHash<QByteArray, Constructor> &constructors(){static QHash<QByteArray, Constructor> instance;return instance;}};
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);//注冊類CReflectClass<Widget>::registerClass<ClassA>();CReflectClass<Widget>::registerClass<ClassB>();//創(chuàng)建對象auto a = static_cast<ClassA*>(CReflectClass<Widget>::createObject("ClassA",this));a->test();auto b = CReflectClass<Widget>::createObject("ClassB",this);}Widget::~Widget(){delete ui;}ClassB::ClassB(QObject *parent):QObject(parent){qDebug() << __FUNCTION__ ;}ClassA::ClassA(QObject *parent):QObject(parent) {qDebug() << __FUNCTION__ ;}void ClassA::test(){qDebug() << __FUNCTION__;}
深圳市優(yōu)飛迪科技有限公司成立于2010年,是一家專注于產(chǎn)品開發(fā)平臺解決方案與物聯(lián)網(wǎng)技術(shù)開發(fā)的國家級高新技術(shù)企業(yè)。
十多年來,優(yōu)飛迪科技在數(shù)字孿生、工業(yè)軟件尤其仿真技術(shù)、物聯(lián)網(wǎng)技術(shù)開發(fā)等領(lǐng)域積累了豐富的經(jīng)驗,并在這些領(lǐng)域擁有數(shù)十項獨立自主的知識產(chǎn)權(quán)。同時,優(yōu)飛迪科技也與國際和國內(nèi)的主要頭部工業(yè)軟件廠商建立了戰(zhàn)略合作關(guān)系,能夠為客戶提供完整的產(chǎn)品開發(fā)平臺解決方案。
優(yōu)飛迪科技技術(shù)團隊實力雄厚,主要成員均來自于國內(nèi)外頂尖學(xué)府、并在相關(guān)領(lǐng)域有豐富的工作經(jīng)驗,能為客戶提供“全心U+端到端服務(wù)”。
技術(shù)鄰APP
工程師必備
工程師必備
- 項目客服
- 培訓(xùn)客服
- 平臺客服
TOP




















