c++反射類和成員函式的實現,需要用到stl標準模板庫
//定義反射工廠類以及基類nsobject
#ifndef __ns_object_factorye_h__
#define __ns_object_factorye_h__
#include #include typedef void* (*sel)(void);
typedef sel (*callfuc)(void);
class nsobject;
~base(){};};
struct nsobjectfactory
static sel callfaction(std::string const& s)
static map_type * getmap()
return m_map;
}static fuc_map_type* getfunctionmap()
return fuc_map;
}};
nsobjectfactory::map_type * nsobjectfactory::m_map = 0;
nsobjectfactory::fuc_map_type * nsobjectfactory::fuc_map = 0;
templatensobject * createt()
templatestruct nsobjectregister : nsobjectfactory };
#define refection_class_implement_define(name) \
virtual string tostring(); \
static nsobjectregisterregisternsobject
#define refection_class_implement(name) \
nsobjectregistername::registernsobject(#name)
#define nsclassfromstring(name) \
nsobjectfactory::createinstance(name)
struct fuctionregister : nsobjectfactory
};#define refection_function_implement(name) \
static fuctionregister* f_reg_##name = new fuctionregister(#name, (callfuc)name)
#define nsselectorfromstring(name) \
nsobjectfactory::callfaction(name)
#endif // __ns_object_factorye_h__
//示例封裝成員函式反射方法定義乙個base類
#define __ej_get_pointer_to(name) \
sel _ptr_to_##name() \
refection_function_implement(_ptr_to_##name);
#define ej_bind_function_define(name, argc_name, argv_name) \
int _func_##name(size_t argc_name, const char* argv_name)
#define ej_bind_function(class, name, argc_name, argv_name) \
\static int _##class##_func_##name( \
base* object, \
size_t argc, \
const char argv \
) \
__ej_get_pointer_to(_##class##_func_##name)\
\/* the actual implementation for this method */ \
int class::_func_##name(size_t argc_name, const char* argv_name)
class base: public nsobject ;
refection_class_implement(base);//反射類實現
//反射成員函式類申明
ej_bind_function(ejbindingejectacore,include, argc, argv )
return 1;
}
//****************************************===
//使用方法
typedef int (*call_back)( base* object, size_t argc, const char argv );
int main()
C 類的成員變數和成員函式的問題
類是一種資料型別,該型別類似於普通的資料型別,但是又有別於普通的資料型別。類這種資料型別是乙個包含成員變數和成員函式的乙個集合。下面是student類的定義。例1 類可以包含成員變數和成員函式 class student 本例宣告了類student,並且在student類中宣告了四個成員變數 nam...
c 類的成員函式
1 成員函式的宣告必須在類內,定義可以在類內或者類外。定義在類內部的函式隱式的為inline函式 非成員函式的宣告和定義都必須在類外。2 this指標 this指標是成員函式額外的隱式引數,this是乙個常量指標,不允許改變this中儲存的位址。預設情況下this的型別是指向類型別非常量版本的常量指...
C 類成員函式的儲存方式 C 類成員
對於類的大小,我們發現類內成員函式並不存在於類的儲存空間。這引發了我們的思考,類中的函式成員儲存在什麼地方?資料成員每個物件會有乙份,函式成員會不會也是這樣呢?include using namespace std class time private int hour int minute int...