#ifndef __reflect_h__
#define __reflect_h__
#include #include //反射:就是程式在執行的過程中,可以通過類名稱建立物件,並獲取類中申明的成員變數和方法。
//反射雖然不屬於二十三種設計模式,卻是很重要的一種機制,c++語言並不支援反射,所以只能通過一些手段模擬實現。
//建立具體類的函式指標
typedef void* (*createclasscallback)(void);
class reflectfactory
;private:
std::mapm_classmap;
static reflectfactory* m_instance;
};//通過建立全域性物件會呼叫建構函式完成註冊
class registeraction
;//定義註冊巨集來定義建立類例項的函式,並自動生成乙個全域性物件
#define register_class(classname) \
classname * create##classname() \
\registeraction g_register##classname(#classname, (createclasscallback)create##classname)
//基類
class ibase
virtual ~ibase(){}
public:
virtual void print() = 0;
};//具體類
class classa : public ibase
;class classb : public ibase
;void testreflect();
#endif
#include "reflect.h"
reflectfactory * reflectfactory::m_instance = null;
register_class(classa);
register_class(classb);
reflectfactory * reflectfactory::getinstance()
return m_instance;
}bool reflectfactory::registerclass(std::string classname, createclasscallback method)
return false;
}void * reflectfactory::getclassbyname(std::string classname)
} return null;
}registeraction::registeraction(std::string classname, createclasscallback method)
classa::classa()
classa::~classa()
void classa::print()
classb::classb()
classb::~classb()
void classb::print()
void testreflect()
C 設計模式之 抽象工廠模式與反射
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類 在access中給user表增加一條記錄 在access中根據id得到user表一條記錄 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類 class department public string id inte ce id...
反射技術與設計模式
反射 reflection 是 net 中的重要機制,通過放射,可以在執行時獲得.net中每乙個型別 包括類 結構 委託 介面和列舉等 的成員,包括方法 屬性 事件,以及建構函式等。還可以獲得每個成員的名稱 限定符和引數等。有了反射,即可對每乙個型別瞭如指掌。如果獲得了建構函式的資訊,即可直接建立物...
反射與工廠設計模式
工廠設計模式的一般格式 介面 實現對應介面的子類 工廠類通過反射技術改進的工廠,不再使用new關鍵字來例項化物件了 package com.reflect.factory.model inte ce ifruit ifruit class factory public static ifruit g...