c++游戏服务器配置加载管理实现

本文介绍了游戏服务器中配置文件加载的常见方法,包括简单包含所有配置文件、无需修改管理器的自动注册方式,以及使用模板实现的通用配置加载管理器,该管理器支持配置加载顺序和数据加载,简化了配置管理并提高了代码的灵活性。
摘要由CSDN通过智能技术生成

做过游戏的都知道在游戏服务器中配置文件很多,基本上会达到两三百张配置表,而加载配置的方式有很多,下面就为大家介绍几种配置加载的方式。

首先简介一种常用的也是最简单的方式,那就是包含所有的配置文件一个个的调用,代码大致如下:

//a.h 配置文件a

bool loada();//加载配置文件a

//b.h 配置文件b

bool loadb();//加载配置文件b

……

//cfgmgr.h 统一调用配置文件加载函数

include“a.h”

include“b.h”

……

void loadall(){

loada();

loadb ()

}

这种方式简单易学,一般做过项目的人都能够想到,但是在每次增加新的配置的时候都需要在cfgmgr文件中包含头文件并且调用加载函数。

下面我们对上面的代码进行一下改进,我们希望增加配置的时候不需要在cfgmgr中包含头文件和调用对应的函数,这样可以减少头文件包含加快编译速度,避免修改任何配置头文件都会重新编译cfgmgr。代码大致如下:

//cfgmgr.h

class CfgBase;

class CfgMgr:public CSingleton<CfgMgr>{//CSingleton 为单例

void addcfg(CfgBase* cfg){m_allCfg.emplace_back(cfg)}

void load(){

for(auto& iter : m_allCfg)

iter->load();}

private:

std::vector<CfgBase* >m_allCfg;

};

class CfgBase{

CfgBase(){CfgMgr::instance().addcfg(this);}//在构造的时候把自己注册到CfgMgr中

virtual ~CfgBase();

virtual  void load()=0;

};

//a.h//配置a

class A:public CfgBase,public CSingleton<A>{

void load();//加载a

};

//a.cpp//配置a

static bool __TYPE__ =&A::instance() != NULL;//注意这里是在cpp文件中定义一个静态变量,全局静态变量会在调用main函数之前初始化,在初始化的时候就会调用单例生成对象,生成对象的时候在调用构造函数这样就可以实现自动注册到配置管理器中了。我们不用在管理器中一个个头文件包含和调用。

那可能的人不想使用继承,就希望自己定义的任意类型都能够加到配置管理器中,或者是包括配置或者数据加载都放到一个管理器中,下面介绍一种更为特殊的加载方式,代码如下:

//cfgmgr.h

#ifndef

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值