Doom3 CVarSystem分析

转发请注明出处
CVarSystem是用来方便管理控制台变量的。其中核心类有idCVar类
与 idCVarSystem。 其中idCVarSystemLocal实现了idCVarSystem类。
声明一个idCVar对象即声明了一个控制台变量,例如:
idCVar my_var("myval0");
但是想象一下,当我们在程序中多处使用一个变量的时候,若我们把我们
所要的数据塞到idCVar类里的话。那么就会出现歧义。也就是有可能出现同名
的变量在多个不同的地方被声明,并且值不同。idCVar类应用了Proxy(代理模式)
这种设计模式。idCVar并不直接持有变量的值。而他通过一个叫intenalVar的
成员变量,而该成员变量同样指向一个idCVar对象。访问idCVar变量的函数都
通过调用intenalVar的同名函数获得。也就是说真正持有数据的intenalVar所指向
的指针。而intenalVar在初始化后会被指向一个idInternalCVar的对象。该
idInternalCVar类继承自idCVar类。在初始化idCVar时会自动在idCVarSystemLocal
控制台变量系统中注册自己。若当前类没有被分配一个internalVar 该 idCVarSystemLocal
会为其分配一个。若看到声明该控制台变量的名称已经在系统中存在同名的internalVar
则让该变量指向这个已存在的idInternalCVar变量。并且尝试更改其值。这种
感觉有点类似于只能指针。你可以向以下方式声明变量:
在某个函数中:
void func1(){
...
idCVar("myval0" , "0" , CVAR_INTEGER , "my frsit val");
...
}
在另一个函数中:
void func2(){
...
idCVar("myval0" , "123" , CVAR_INTEGER , "my val");
...
}
在两处声明的同名控制台变量指向的是一个idInternalCVar对象!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值