函式的註冊

2021-10-01 14:06:16 字數 847 閱讀 8007

遊戲伺服器**中有時候有很多相似的函式呼叫,為了簡化函式的操作與管理,也為了後續的擴充套件,常常採用"註冊"的方式。例如對於召集類函式的管理,有隊伍召集,各種活動召集,家族召集等,如果有新的召集型別,只需要註冊一下新型別就可以了。

enum calltype{

callup_test_1 = 1,

callup_test_2 = 2,

callup_test_3 = 3,

#define reg_callup(type) \

_callup_func[type] = bind(&callupmgr::on_##type, this, _1, _2)

class callupmgr : public singleton

public:

typedef functionfunction;

bool call_by_type(..., int type);

void init() 

reg_callup(callup_test_1);

reg_callup(callup_test_2);

reg_callup(callup_test_3);

bool on_callup_test_1(..., ...);

bool on_callup_test_2(..., ...);

bool on_callup_test_3(..., ...);

private:

map_callup_func;//型別,相應的處理函式

在call_by_type函式中,可以根據type找到需要呼叫的處理函式。但需要新增新的召集型別是,只需要新增乙個列舉型別,並且註冊相應的型別,然後新增一下對應的處理函式就可以了。

lua註冊函式

include include define max color 255 extern c 引數lua state,返回值為返回值的個數 在push結果的時候不需要清空棧,因為有表示結果個數的返回值,在函式返回後lua自動清除棧返回結果下面的內容 static int l sin lua state...

驅動註冊的probe函式

probe的呼叫 從driver register看起 int driver register struct device driver drv klist init與init completion沒去管它,可能是2.6的這個裝置模型要做的一些工作。直覺告訴我要去bus add driver。bus...

驅動註冊的probe函式

probe的呼叫 從driver register看起 int driver register struct device driver drv klist init與init completion沒去管它,可能是2.6的這個裝置模型要做的一些工作。直覺告訴我要去bus add driver。bus...