函数的注册

游戏服务器代码中有时候有很多相似的函数调用,为了简化函数的操作与管理,也为了后续的扩展,常常采用"注册"的方式。例如对于召集类函数的管理,有队伍召集,各种活动召集,家族召集等,如果有新的召集类型,只需要注册一下新类型就可以了。

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

{

public:

    typedef function<bool (..., ..)> Function;

    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<int, Function> _callup_func;//类型,相应的处理函数

};

在call_by_type函数中,可以根据type找到需要调用的处理函数。但需要添加新的召集类型是,只需要添加一个枚举类型,并且注册相应的类型,然后添加一下对应的处理函数就可以了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值