gpt4 book ai didi

c++ - 您最喜欢的跨平台开发方式是什么?

转载 作者:可可西里 更新时间:2023-11-01 15:37:00 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




我目前正在研究跨平台应用程序,只是想知道其他人如何解决问题,例如:

  • 字节序
  • 浮点支持(一些系统在软件中模拟,非常慢)
  • I/O 系统(即显示、声音、文件访问、网络等)
  • 当然,还有大量编译器差异

  • 显然,这是针对像 c/c++ 这样的语言,它们不会抽象大部分这些东西(不像 java 或 c#,它们在很多系统上都不支持)。

    如果您好奇,我正在开发的系统是 Nintendo DS、Wii、PS3、XBox360 和 PC。

    编辑
    这里有很多非常好的答案,从如何自己处理差异到图书馆建议(甚至是放弃和使用葡萄酒的建议)。我实际上并不是在寻找解决方案(已经有了解决方案),只是很好奇其他人如何解决这种情况,因为了解其他人如何思考/编码总是很好的,这样您就可以继续发展和成长。

    这是我解决问题的方法(如果您还没有从上面的系统列表中猜到,我正在开发控制台/Windows 游戏)。请记住,我所使用的系统通常没有为它们编写的跨平台库(Sony 实际上建议您从头开始编写自己的渲染引擎并只使用它们的 OpenGL 实现,这并不完全遵循无论如何,作为引用)。

    字节序
    我们所有的 Assets 都可以为每个系统定制。我们所有的原始数据(纹理除外)都存储在 XML 中,我们在项目构建时将其转换为系统特定的二进制格式。看看我们是如何为游戏机开发的,我们不需要担心数据在不同endian格式的平台之间传输(只有PC允许用户这样做,因此它与其他系统也是绝缘的) .

    浮点支持
    大多数现代系统都可以很好地处理浮点值,除了 Nintendo DS(和 GBA,但现在对我们来说这几乎是一个死平台)。我们通过 2 个不同的类来处理这个问题。第一个是“定点”类(模板化,可以指定要使用的整数类型和十进制值的位数),它实现所有算术运算符(处理位移)并自动进行类型转换。第二个是“浮点”类,它基本上只是大部分浮点数的包装器,唯一的区别是它还实现了移位运算符。通过实现移位运算符,我们可以在 DS 上使用位移进行快速乘法/除法,然后无缝过渡到更适合浮点数的平台(如 XBox360)。

    输入/输出系统
    这对我们来说可能是最棘手的问题,因为每个系统都有自己的 Controller 输入、图形方法(XBox360 使用 DirectX9 的变体,PS3 具有 OpenGL,或者您可以从头开始编写自己的,DS 和 Wii 有自己的专有系统)、声音和网络(实际上只有 DS 在协议(protocol)上有很大不同,但是它们每个都有自己的服务器系统,您必须使用)。

    我们最终解决这个问题的方法是简单地为每个系统编写相当高级的包装器(例如图形的网格、 Controller 的键映射系统等),并让所有系统使用相同的头文件进行访问。然后只需为每个平台编写特定的 cpp 文件(从而形成“引擎”)。

    编译器差异
    这是一件不容易解决的事情,当我们遇到编译器的问题时,我们通常将信息记录在本地 wiki 上(这样其他人就可以看到要注意的内容以及相应的解决方法),如果可能的话,写一个宏来为我们处理这种情况。虽然它不是最优雅的解决方案,但它是有效的,并且可以看到一些编译器在某些地方是如何被简单地破坏的,更优雅的解决方案无论如何都会破坏编译器。 (我只是希望所有的编译器都实现了 Microsoft 的“#pragma once”命令,这比将所有内容包装在 #ifdef 中要容易得多)

    最佳答案

    这种复杂性的很大一部分通常由您使用的第三方库(boost 是最著名的)解决。很少有人从头开始写所有东西......

    关于c++ - 您最喜欢的跨平台开发方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/586349/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com