使用C ++ 11进行跨平台游戏引擎开发


18

注意:这不是有关C ++ 03和C ++ 11的“给出您的意见”问题。

我们的游戏引擎是用C ++ 03编写的,旨在在Windows,OSX和iOS上进行编译。计划在不久的将来为Linux提供支持。关于控制台,我们的经验有限,这就是为什么我要问这个问题。

当前,我们正在争论是否需要在不久的将来切换到C ++ 11并使用C ++ 11标准的不兼容功能而将引擎移植到任何当前gen控制台上的问题(也许一些控制台支持的编译器尚不支持C ++ 11?我们不知道...)。

因此,拥有跨平台和游戏机经验的游戏开发人员,您认为我们应该坚持使用C ++ 03,直到新一代游戏机问世,并且大多数人都已转换为C ++ 11标准(他们已经这样做了吗?)。还是大多数控制台都在使用/支持已经支持C ++ 11功能的编译器(VC ++,GCC或变体?)?


1
我的知识有些过时了,因此我不会将其作为答案,但是我过去对控制台编译器的经验是,如果它们符合旧标准,您会很幸运,而不必介意新标准。
Kylotan '11年

1
哪些功能及其重要性如此重要,以至于您考虑使用即使在最受欢迎的开发平台上也没有完全实现的标准?
snake5 2012年

4
@ snake5:自动,lambda,模板别名,c-tor委派。这些功能不仅使我们的代码更具可读性/可维护性,而且提高了生产力。当我从C ++ 11切换到C ++ 03时,只是auto关键字是我非常想念的事情之一。可变参数模板之类的其他功能虽然非常强大并且可以肯定地改善代码,但是我们可以做到(没有VC ++编译器尚未实现)。
Samaursa

除了Kylotan的评论外,我完全同意他的观点,甚至在我的经历中添加了一个特殊的例子。如果您打算将该引擎扩展到android平台(可以使用C ++完成),那么您将会遇到麻烦,因为NDK中的C ++功能不完整。您将无法使用新标准,即使以前的某些标准也有问题。
Grimshaw 2012年

1
@DevilWithin,我一直在Android NDK中使用很多C ++ 11功能,而没有任何问题。
notlesh 2012年

Answers:


19

如果您依靠代码来支付食物和住所,并且需要在未知的未来平台上支持跨平台(或者合理地将来可能需要支持跨平台),那么请设计代码以依靠一堆不知名的编译器作者正确地遵循最新的语言标准是危险的(我认为这是不负责任的)。这对您很危险,因此对您的家属也很危险。

如果您愿意为了承担这种风险auto,那么一定要坚持下去。但我不建议您这样做。

因为以我的经验来看,跨平台(尤其是在控制台上)的最佳实现方式是针对最低的公分母,您可以肯定它几乎可以在任何地方使用,而不是依赖于所有最新的“狂风”语言功能。如果某天您需要移植到不支持它们的平台,那么您最终将不得不从头开始重写系统。在发生这种情况时,您能负担得起工资/租金吗?


4
为此(以及文章的其余部分,但对此)+1:“依靠一群未知的编译器作者正确地遵循最新的前沿语言标准是危险的”。尝试最新的玩具总​​是很有趣,对它们的依赖不是那么多。
NoobsArePeople2 2012年

2
对于提供这些“谨慎”的答案,我一直非常着急,尤其是当这些答案显然不是原始海报所希望听到的时。但是我在职业生涯中已经多次看到控制台上的大型编译器错误,以至于我不愿意跨平台项目采用新的语言标准。需要重写代码来解决编译器中的问题从来都不是一件有趣的事情,尤其是在有期限的情况下。
特雷弗·鲍威尔

我不会对此进行否决,但是新的C ++标准不只是语法糖,例如auto关键字。
vdaras

1
@TrevorPowell,您说过,当新的C ++标准具有更重要的基本功能时,他会冒险使用auto关键字。在考虑风险时,必须将其中一些变量(如右值引用)作为重要考虑因素。
vdaras 2013年

2
这就是为什么我说@TrevorPowell的原因,尽管我对此有任何争论,但该帖子不值得一票。我相信这是一篇不错的文章,我只是想澄清一下新的C ++标准具有一些非常重要的功能,考虑使用它并不仅仅是像auto这样的小事情。
vdaras

6

如果您愿意做更多的工作,则可以考虑使用折射解决方案。叮当目前在该地区发生了一些有趣的事情。应该可以使用auto关键字,通过重构器运行它,该重构器将找到它的所有用法,为您解决它们并输出代码,然后使用所需的任何代码对其进行编译。

但这意味着更少的时间来制作游戏。

还有一些额外功能的潜力,例如反射。您可以创建一个类并自动生成所有属性的列表,以在运行时进行检查。对于脚本编写,制作游戏编辑器等可能非常有用。编辑:clreflect

http://cppnow.org/session/refactoring-c-with-clang/

http://www.youtube.com/watch?v=mVbDzTM21BQ

http://clang.llvm.org/docs/Tooling.html

http://clang.llvm.org/docs/RAVFrontendAction.html


很有意思;您是否为此(或类似)目的亲自尝试过?
乔纳斯·比斯特罗姆(JonasByström)2012年

暂时还没有决定,要等到它有了更好的发展,但是上一次我真正研究它时,它只是在svn中。
大卫·C·毕晓普(Bishop)

非常有趣(+1)
Samaursa

这让我想起了类似python的东西,2to3但是相反,它虽然很棒,但可能更难使用。男人,能auto得到多少好?
史蒂文·卢
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.