1. 程式人生 > >c++反射機制的實現(完整程式碼,相當靠譜)

c++反射機制的實現(完整程式碼,相當靠譜)

雖然這是windows下寫的程式碼,但是比較合理,非人云亦云,很靠譜。我昨天說過實現一個優秀的c++反射機制,一定要和動態連結庫扯上關係(個人認為)。

下面這篇文章,雖然沒有扯上動態連結庫,但是也是相當不錯的了。關於我個人認為的c++反射機制完整優秀版本,以後我再推出分享。

參考了wxWidgets的相關程式碼,並進行簡化,同時借鑑了網上的相關內容,改進之處在於,只需要繼承基本類Object,在類的標頭檔案中定義巨集,DECLARE_CLASS(類名),在類的實現檔案中定義巨集,IMPLEMENT_CLASS(類名),即可,歡迎指正。
程式碼以來的庫都是C++標準庫,所以不需要額外新增庫。
例如:
#include<iostream> #include<cstring> #include "DynBase.h"
using namespace std; classA :publicObject { DECLARE_CLASS(A) public : A(){cout<<hex<<(long)this<<" A constructor!"<<endl;} ~A(){cout<<hex<<(long)this<<" A destructor!"<<endl;} }; IMPLEMENT_CLASS(A) class B : public Object { DECLARE_CLASS
(B) public : B(){cout<<hex<<(long)this<<" B constructor!"<<endl;} ~B(){cout<<hex<<(long)this<<" B destructor!"<<endl;} }; IMPLEMENT_CLASS(B) int main() { Object* p = Object::CreateObject("A"); delete p;     system("pause");     return 0; } 標籤:
<無>

1. [檔案]DynBase.cpp ~ 781B    下載(66)    

01 #include "StdAfx.h"
02 #include <map>
03 #include "DynBase.h"
04
05 staticstd::map< string,ClassInfo*> *classInfoMap = NULL;
06 usingnamespacestd;
07 IMPLEMENT_CLASS(Object)
08 boolObject::Register(ClassInfo* ci)

相關推薦

c++反射機制實現完整程式碼相當

雖然這是windows下寫的程式碼,但是比較合理,非人云亦云,很靠譜。我昨天說過實現一個優秀的c++反射機制,一定要和動態連結庫扯上關係(個人認為)。 下面這篇文章,雖然沒有扯上動態連結庫,但是也是相當不錯的了。關於我個人認為的c++反射機制完整優秀版本,以後我再推

C#DES加密JavaDES解密另轉C#和Java實現Des完整程式碼

<span style="font-family: Arial, Helvetica, sans-serif;">今天,由於開發需要C#做DES加密,Java做DES解密,在實現時有這樣一個問題:C#做DES有加密向量IV,Java常見方式是沒有的。在解密時需要

C++中用模板類結點類連結串列類實現的單鏈表的合併操作!

程式碼通俗易通,如下 List.h #include<stdio.h> template <class T> class ListNode { T data; ListNode<T>* link; public:

c++ 反射機制: 用類名作變數動態建立物件

什麼是反射 從建立物件的角度上來看,狹義的說,比如有個 class A ,你能直接 new A() 來建立 物件。但是如果想根據字串 “A” 來建立 class A 的物件,比如 使用 new “A” 的形式來建立 物件,甚至 “A” 是個變數。 str =

快速排序C++實現遞迴非遞迴

#include <iostream> #include <vector> #include <stack> using namespace std; int q

JAVA中反射機制JavaBean的內省與BeanUtils庫

getc ron 輸出結果 下載 比較 static 完成 自動完成 規則   內省(Introspector) 是Java 語言對JavaBean類屬性、事件的一種缺省處理方法。   JavaBean是一種特殊的類,主要用於傳遞數據信息,這種類中的方法主要用於訪問私有的

Android-計算器的實現介面佈局計算邏輯處理

    原始碼下載    閒來無事,用android做一個計算器玩玩,想著做一個私密空間,表面是計算器,按下原先設定的算式後可以跳轉到私密介面,當想想有些費事,以後若還有閒散時間,再來實現。    介面是這樣的,採用了GridLayout佈局,很容易實現。程式碼如下<?

C++中二分查詢遞迴非遞迴

二分查詢:二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。 二分查詢要求: 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。

C++模板的實現模板函式和模板類附帶模板實現順序表和連結串列程式碼

模板  當我們實現一個交換函式時,我們可以寫成如下。 void Swap(int& x, int& y) { int tmp = x; x = y; y = tmp; }  這裡只能交換兩個整數,當我們

C++反射機制:可變引數模板實現C++反射

### 1. 概要   2018年Bwar釋出了[《C++反射機制:可變引數模板實現C++反射》](https://www.cnblogs.com/bwar/p/9304261.html),文章非常實用,Bwar也見過好幾個看了那篇文章後以同樣方法實現反射的專案,也見過不少從我的文章抄過去連程式碼風格類名函式

C#DES加密JavaDES解密另轉C#和Java實現Des完整代碼

sso output uri sta RM light ash for str C#DES加密,JavaDES解密,另轉C#和Java實現Des完整代碼 轉載 2014年06月17日 17:36:09 標簽: DES / C#DES / JavaDES /

C++反射機制:可變參數模板實現C++反射

https dcm ESS 容易出錯 指定 ring 人員 時間處理 emp 1. 概要   本文描述一個通過C++可變參數模板實現C++反射機制的方法。該方法非常實用,在Nebula高性能網絡框架中大量應用,實現了非常強大的動態加載動態創建功能。Neb

C++反射機制:可變參數OA信用盤平臺搭建模板實現C++反射

github () 簡單的 同學 多重繼承 是什麽 定義 通用 插件 概要OA信用盤平臺搭建Q1446595067 ??本文描述一個通過C++可變參數模板實現C++反射機制的方法。該方法非常實用,在Nebula高性能網絡框架中大量應用,實現了非常強大的動態加載動態創建功能。

C# GDI繪製儀表盤程式碼實現

純程式碼實現GDI繪製儀表盤,效果在程式碼下面。public partial class HalfDashboardUc : UserControl { /// <summary> /// 儀表盤背景圖片 /// </summar

一個模型搞定所有風格轉換直接在瀏覽器實現demo+程式碼

用一個模型就能實現所有型別的風格轉換!一個名為Arbitrary Image Stylization in the Browser的專案最近火起來。 作者是日本小哥Reiichiro Nakano,他用TensorFlow.js在瀏覽器中構建了一個使用任意影象進行風格化的demo。 不像以前

C語言——棧的實現順序棧兩個順序棧共享空間鏈式棧

1.什麼是棧 棧是一種只能在一端進行插入或者刪除操作的線性表)。其中允許進行插入或者刪除操作的一端稱為棧頂。棧的插入和刪除一般叫入棧和出棧。棧的順序儲存結構叫做==順序棧==,棧的鏈式儲存結構叫做==鏈棧==。 2.棧的特點 棧的特點是==後進先出== 3.順序棧 標頭檔

微信小程式實現跑馬燈效果完整程式碼

在微信小程式 裡實現跑馬燈效果,類似滾動字幕或者滾動廣告之類的,使用簡單的CSS樣式控制,沒用到JS,效果如下圖: Wxml程式碼: <!--跑馬燈 Linyufan.com--> <view class="marquee_container" st

各種排序演算法的場景以及c++實現插入排序希爾排序氣泡排序快速排序選擇排序歸併排序

對現有工作並不是很滿意,所以決定找下一個坑。由工作中遇到排序場景並不多,大都是用氣泡排序,太low,面試又經常問到一些排序演算法方面的東西。剛好讓小學妹郵的資料結構也到了。就把各種排序演算法重新總結一下,以作留存。 排序分為內部排序和外部排序,內部排序是在記憶體中排序。外

小工具Java反射機制實現任意物件集合按指定任意欄位進行分組通用程式實踐

在應用開發的時候,我們有時候會遇到需要對一個給定集合進行分組的情況。如果該集合的資料記錄是從資料庫的獲取,通常我們最簡單的方案是直接在sql層面select後group by完成。 但是,假如某些場景下該資料不是從資料庫獲取呢?那就需要在應用程式層面進行分

小工具Java反射機制實現任意物件集合排序並且獲取排列名次的通用程式實踐

在應用開發的時候,我們有時候會遇到需要對一個給定集合進行排序的情況。如果該集合的資料記錄是從資料庫的獲取,通常我們最簡單的方案是直接在sql層面select後order by完成。 但是,假如某些場景下該資料不是從資料庫獲取呢?那就需要在應用程式層面進行排