今天在拜读过pongba的一篇关于C++编译机制的文章后(http://blog.csdn.net/pongba/archive/2003/10/24/19130.aspx),找到一种变相实现类模板分离式编译的方法。
这里所谓的分离式编译,是指把类的定义和成员函数的实现分别置于独立的.h和.cpp文件中。对于一般的类,这样做是没有问题的,而如果试图将模板类的定义与实现分离,则大多数编译器会给出链接错误。这是因为单独定义的模板类成员函数无法被实例化(详细的分析请参见开头链接的那篇文章)。
而解决这一问题的思路非常直接——手动让它们实例化。具体说来,就是在实现模板类成员函数的.cpp文件中再定义一个实例化函数,在这一函数中实例化类模板,并把所有的成员函数调用一遍。
示例代码如下:
-----------------------
template.h
-----------------------
//定义类模板
template <class T>
class CTemplate
{
T m;
public:
void fun(void);
};
-----------------------
template.cpp
-----------------------
#include "template.h"
//实现类模板的成员函数
template <class T>
void CTemplate<T>::fun(void)
{
m++; //假设类型T有合法的++运算符
}
//实现分离式编译的关键——专门用来实例化模板类成员函数的函数
void instantiate(void)
{
CTemplate<int>
instance.fun(); //在这里调用一次CTemplate
}
-----------------------
main.cpp
-----------------------
#include "template.h"
int main()
{
//主函数这里ct的fun()调用可以顺利进行,
//但是要注意用来实例化模板类的数据类型应与instantiate()中使用的相一致,
//这里使用的都是int型。
//若想使用其他数据类型,比如float,
//则需要在instantiate()中用同样的方法对float做实例化。
CTemplate<int>
ct.fun();
return 0;
}
另外要说明的是,这种方法并不会增加运行时的时间开销,因为instantiate()并没有在main()的调用堆栈中出现,它的作用仅仅是让编译器为模板类的成员函数生成二进制代码,以消除链接错误。
Jul 31, 2008
变相实现C++类模板的分离式编译
Jul 19, 2008
我的ChinaJoy之行
- 最长的长队
参观者众,这一点我事先已有心理准备,但九点钟到达会场门口面对人流时我还是愕然了。买门票的队伍浩浩荡荡的排到视线以外,我花了十分钟才走到队尾,队伍长度估算起来近一公里!这是我见过的最长的长队……
两个小时以后,我拖着已经略微僵直的双腿,紧握着一张宝贵的入场券,进入上海新国际博览中心的W2厅……
- Showgirls
美女在眼球经济时代的力量绝对不能被忽视。每一个展台,无论人气火爆与否,无论规模庞大与否,都会有showgirl在那里戳着。她们有为参观者派发礼品的,也有就那么干站着让人拍照的,但几乎没有给玩家介绍游戏产品的——我以为这才应该是她们存在的目的……
虽然我的主要兴趣在于游戏本身,但是,这个嘛,毕竟是男人哈,完全不为所动也是不正常的……美女的脸蛋和身材是文字描述不出来的,上图了。
这些是我们公司请来的
这些我记得是网易的
- 游戏才是重点
游戏本身才是展会的重点,至少我自己这么认为。
离入口最近的是SONY的PlayStation系列产品展台,这里提供了大量的PS3供玩家试玩,其中很多机器上运行的是名字如雷贯耳的大作,包括《合金装备4》、《Haze》、《GT5序章》等等。这些次世代的游戏在画面上无一不震撼人眼,某些场景已经真假难辨。这一点国内的游戏企业与国际水平差距甚远,我们这些从业人员任重道远。在创意性上,一款叫做《Burnout Paradise》的赛车游戏值得一提。它不像一般的竞速游戏以超越对手为最终目标,你在这个游戏里要做的是把一辆辆高级跑车以最残暴的方式撞得粉碎,撞得越漂亮,得分就越高。这满足了人们潜意识里的破坏欲望。
国内的游戏嘛,昱泉国际蛰伏多年后推出一款《流星Online》,从名字可以看出是拓展原来《流星蝴蝶剑》的模式,但画面的进步让人佩服,其引擎的素质绝对是AAA级的,昱泉这些年来在3D技术上的积累与探索值得肯定。作为一款格斗游戏,这款游戏的操控性也很上乘,可以让人快速上手。我操控一名女性角色在现场的乱斗中连续击败数名对手,颇有成就感。
另外Epic Games和Crytek这两家世界最高水平的引擎开发商都设架设了展台展示他们各自的引擎。Crytek还从美国请来工程师做专题讲座,详细阐述了CryENGINE 2在角色动画方面的强大功能。可惜这些真正有价值的东西关注的人并不多。我听完了全部的讲座,并直接用英语与那个工程师交流了一个问题:“Does your lip synchronization system support any language other than English?” 就是问CyrENGINE 2的唇形同步系统支不支持英语以外的其他语言,得到的答案是肯定的。
巨人网络的展台处于一个半封闭的空间内,里面耸立着几根竹子,中心有一个人工水池,水池中是一块平台,上面停放着一辆《巨人》中出现的摩托车,车周围环绕着女护士若干……仅在展台的角落里有几台试玩机器,运行着《征途》和《巨人》,不过就我观察,关注者寥寥,还是showgirl更有吸引力。
很巧的是,我在公司展台逗留的短短几分钟内,竟然遇到了两个领导。其一,在水池边看美女的一个短发男人,竟是我的直属领导——技术中心的夏老板;其二,当我准备离开展台时,前边以一个穿红背心戴黑墨镜的人为首的一队人快步走过,我靠这不是史玉柱么?!等我回过神来想凑近了聊几句时却发现一整队人已经不见踪影……
- 关于老牛
老牛恰巧是盛大ChinaJoy上的工作人员。我们7月5号在北京站分别之后很快又在上海见面了。听他的叙述,他这些天在盛大的工作比较顺利,玩《魔兽世界》竟然是他们工作的必需项目,周末也不用加班。
晚饭是他带我去盛大附近的一家店吃的。饭后我们又畅谈了许久。大学四年头对头睡觉的哥们儿能于同一个城市里在同一个行业内奋斗,实属不易。祝愿我们在上海闯荡的生活一直如此顺利下去……
总体来说,ChinaJoy的规模和热度要超出北京网博会许多,上海不愧为中国游戏之都,选择在这个城市入行游戏业是绝对正确的。但这个展会也直接反映出中国游戏行业的浮躁情绪,与游戏关系不大的showgirl成为展会的主角就足以说明问题。E3以前也是吵吵闹闹的充斥着showgirl,ChinaJoy也是从那儿学过来的,但是人家现在已经进化成专业的行业年会。如果说浮躁是行业成熟所必须经历的,那么我只希望中国游戏业能快速度过这个阶段。
Jul 14, 2008
《DOOM启示录》的启示
事实上这本书绝对名不虚传,等震岳兑现了他的承诺,我一定会再读一遍英文版。《DOOM启示录》表面上是约翰·卡马克和约翰·罗梅洛两位游戏界泰斗人物传奇般经历的真实记录,实质是借助在他们身上发生的一些事件从侧面叙述电子游戏在美国的发展历史。
两位约翰身上确实有许多值得所有游戏开发者学习的东西。卡马克对技术的执着和登峰造极的编程能力,罗梅洛丰富的想象力和不被挫折击败的坚韧,都是我这个刚刚入行的新手应该好好学习的。在接下来的工作中,我将面临和约翰们同样的只有键盘、显示器、外卖和枕头的状态,是被压力压垮,还是飞速进步?命运掌握在自己手里。以卡马克和罗梅洛为榜样,我想我知道应该怎么做。
北美的游戏产业领先中国至少二十年。书中记录的一些上世纪90年代美国游戏业的发展历程,实际上正在中国重演。比如游戏说中一些极端内容遭主流社会的非议,正是现在阻碍中国游戏行业发展的切实问题。我个人从事游戏开发的决定就被曾经的老师所不理解,读过《DOOM启示录》后,再次面对这些异议时,我就打算把书中游戏与人类梦想的那一段精彩文字复述出来。在美国,游戏业最终通过建立完善的分级制度和从业人员的坚持不懈的辩护使反对的声音渐渐隐没,他山之石可以攻玉,国内的游戏业是可以借鉴美国的方法的。
如果你是一个游戏从业人员,请一定要读一读《DOOM启示录》。
Jul 2, 2008
毕业了,要走了
- 2008年6月18日,毕业设计论文答辩,四年的学习任务画上句号。
我在这几个月里为毕业设计投入了大量的时间和精力,学到了不少以后会用得着的图形方面的知识,只不过指导老师不负责的态度令我大失所望,所以完全打消了申请优秀论文的念头。管中窥豹,遍地是这样的教授,中国的高校如何出学术成果?
- 2008年6月20日,经过多日的筹备,“计忆邮心”毕业晚会成功举办。
这是我们最后一次学生活动,凭良心说话,我为此付出了很多,甚至创造了48小时内只睡3小时的熬夜记录。但是这绝对是值得的,我们每一个人的辛劳换来了晚会的空前成功,对毕业的伤感和对未来的期待被散播至科学会堂里每一个人的心内。结束时大家跑到舞台上抱头痛哭,这个景象想必在许多年以后,仍会记忆犹新。
- 2008年6月23日,04401班全员齐聚西直门小肥羊四层,吃散伙饭。
每一个人都或轻或重的醉了,但并没有人被送医院,我们的酒宴恰到好处。我们再一次的抱头痛哭,我们齐声高喊“04401牛B”,我们彼此互送祝福,我们相互道声珍重……散伙饭并没有宣告这个团结集体的解散,人虽天各一方,心却凝聚如一。
- 2008年6月25日,北邮04级本科生毕业典礼,随后大家领取了毕业证书和学位证书。
与四年前开学典礼时同样的拱形气球,预示着这一个轮回的结束和下一个轮回的开始。新校长缘分和导数的讲演我不做评论,我只知道,他的讲话意味着——我毕业了!当我轻轻抚摸毕业证书和学位证书时,我心中是如此激动——我毕业了!
- 2008年6月26日,我打点好行李,挥别我的大学。
清晨我绕着学校再逛一圈,校园虽然不大,每到一处却都有无数的记忆跃出。10点钟我把行李装车,同学在学六楼下列队道别。我忍住了没有哭。今天的告别其实是拉开了人生新的一幕,眼泪已经流的够多了,我要为下一幕做准备了……
- 2008年7月6日,我将搭乘早上的航班离开北京,飞赴上海。
没想到会走的这么匆忙。我抽时间分别与最要好的小学同学和初中同学告了别,但还有许多的好朋友我都来不及再见一面。在这儿给那些没来得及道别的朋友们赔个不是,原谅我的匆匆离去,也祝福你们一切顺利!往后一定要保持联系!