C 反射類和成員函式的實現

2021-06-21 14:54:12 字數 2483 閱讀 5357

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...