作者NIKE74731 (做游戏的心)
看板Programming
标题[问题] 在建构式读script
时间Sun Sep 5 10:33:22 2010
例:
class T;
class B
{
private:
int n;
bool b;
char c;
public:
B(T& t);
~B();
};
class T
{
public:
PythonTool PyTool;
B Obj_b;
public:
T();
~T();
};
B::B(T& t)
{
t.PyTool.RunPyFile();
}
大概是这样
但因为RunPyFile所执行的内容需要B类别的物件
所以在B的建构式根本还没跑完的状况下发会发生存取错误
请问各位高手在这样的情况下要怎麽解决读script的问题?
我问过同学
同学的解决方法是给B一个Init()
原本B的建构是就单纯把值塞0塞NULL
真正初始化交给Init()
但我觉得这样好像有点怪就是了
//=====================================
再说明清楚一点
目前小弟使用VC写一款游戏
T类别是整个游戏的最高阶层管理者
而B类别则是T中的一个成员
功能是处理游戏中的UI部份
读script的目的则是由外部建立相对应的UI
像是按钮在萤幕上的位置、贴图路径、功能(开始新游戏、读取档案、回主选单)
游戏中不能没有UI
所以也不能丢给例外
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 112.104.139.189
1F:推 hilorrk:这是google的coding style 114.36.174.209 09/05 10:34
※ 编辑: NIKE74731 来自: 112.104.139.189 (09/05 10:34)
2F:→ hilorrk:constuctor仅作简单的值初始化 114.36.174.209 09/05 10:35
3F:→ hilorrk:其他的交给Init去做..可以避免一些困扰 114.36.174.209 09/05 10:35
4F:→ loveme00835:写类别前先要考虑的是你 B 跟 T 之间140.121.197.115 09/05 11:33
5F:→ loveme00835:的关系, 如果 B 物件的存在的条件必须140.121.197.115 09/05 11:34
6F:→ loveme00835:是读取成功, 那麽直接写在建构子是无140.121.197.115 09/05 11:35
7F:→ loveme00835:可挑剔的, 如果 B 物件的存在跟读取成140.121.197.115 09/05 11:36
8F:→ loveme00835:功与否没有多大的关联, 就有两种作法140.121.197.115 09/05 11:36
9F:→ loveme00835:1.将 t 物件当成参数传递给成员函式,140.121.197.115 09/05 11:37
10F:→ loveme00835:这时候的 B 比较像是演算法的封装, 读140.121.197.115 09/05 11:38
11F:→ loveme00835:取失败再丢例外就好. 2.把 t 物件再包140.121.197.115 09/05 11:39
12F:→ loveme00835:装成另外一种类别物件, 姑且称他为 A140.121.197.115 09/05 11:40
13F:→ loveme00835:一样是在A建构子读取script, 但是可以140.121.197.115 09/05 11:41
14F:→ loveme00835:多一些属性来标记读取状态提供查询,140.121.197.115 09/05 11:42
15F:→ loveme00835:就像标准库的fstream一样. 除非是简单140.121.197.115 09/05 11:44
16F:→ loveme00835:的给初始值动作, 我觉得写在别的成员140.121.197.115 09/05 11:45
17F:→ loveme00835:函式内既不像物件导向, 也不好管理140.121.197.115 09/05 11:46
※ 编辑: NIKE74731 来自: 112.104.139.189 (09/05 13:23)
18F:→ loveme00835:你可能要改用Aggregation而不是140.121.197.115 09/05 15:29
19F:→ loveme00835:Composition, 像这种读取设定的方式一140.121.197.115 09/05 15:29
20F:→ loveme00835:但发生问题, 应该改采预设的介面, 一140.121.197.115 09/05 15:30
21F:→ loveme00835:个B类别物件建构失败後丢例外, 再改用140.121.197.115 09/05 15:31
22F:→ loveme00835:预设的script去建立另一个B物件140.121.197.115 09/05 15:32
23F:推 loveme00835:如果 RunPyFile 需要用到 B 物件的其140.121.197.115 09/05 15:57
24F:→ loveme00835:他属性, 那 PyTool 应该更适合放在 B140.121.197.115 09/05 15:58
25F:→ loveme00835:类别里面140.121.197.115 09/05 15:58