2009-10-13 129 views
17

我正在写一个小型的C++程序来获得乐趣并扩展我的C++技能。由于它的范围相对较小,我还计划通过使该程序支持Windows和Linux来尝试跨平台开发。学习和跨平台开发(C++)

我认为我的C++熟练程度在休闲和中级之间:OO,一些模板和设计模式,之前使用过STL并试图更详细地研究它,但是,尽管编码这个小程序,我发现越深入挖掘C++,我越感觉到痛苦,尤其是当我了解和处理不同平台/供应商的实现之间的差异时。

像Qt,ACE,Boost这样的跨平台框架的使用似乎有助于加速开发,从而使生活更轻松,但是我担心这是否会超过我的目的。如果有任何C++跨平台开发的“最佳实践”,有人可以提供一些建议吗?谢谢。

回答

16

如果有C++跨平台开发的“最佳实践”,有人可以提供一些建议吗?

有三件事情:

  1. 编写自己的代码,以便它的便携背后的抽象/绝缘/公用事业层

  2. 裹特定平台的API

  3. 选择跨平台的库

您可以选择选项#2和/或#3。 #3,#个2

优势往往是一样的东西,“这已经写好,调试和支持”;缺点是“我必须学习它,我可能不得不为此付出代价,我不一定会自己支持它,它可能不会完全符合我的要求。”

开发人员往往喜欢代替#2选项#3,尤其是如果它是免费的开源的(这三个你提到的库都)。

2

除非你在做图形用户界面的东西跨平台不是一个大问题。

有一些与文件系统有关的小问题(不同的\\分隔符,文件名中允许的字符等),但这些是在应用程序级而不是C++。

做主要应用程序变得越来越复杂,你需要以跨平台的方式处理帮助,文件位置可能的安全和用户信息。对于简单的算法类型编程,不存在任何问题。

Qt主要是一个GUI库,虽然它有额外的跨平台文件系统的东西。 STL,Boost,ACE是跨平台的,但这不是主要的一点。

2

使用它们!认真。您可能需要使用它们的而不是的唯一原因是您计划在无法使用的环境中工作。但是,鉴于其跨平台性质,这不太可能。

你会发现使用它们的好处是巨大的,即使它们不是跨平台的。你所说的“最佳实践”就是能够尽可能地提供你的“产品”。

我曾经回答过一个人的问题,他声称他不想在Xlib以上的级别使用GUI库。如果他真的曾经使用过Xlib,他会知道当我们被迫在如此低的抽象层次上进行编码时,我们都会感受到的痛苦。这与想要在汇编程序中编写代码非常相似,因为C/C++?Python/Perl/everthting-else只是一个更高级的abstarction。

3

使用gcc。它在Windows和Linux上均可用,并且这两种平台上的库和语言语法都是相同的。

对于跨平台GUI应用程序,Qt是一个好主意。如果您试图实现平台独立性,则不会从依赖于GUI框架中脱身。

1

我想你可以使用ACE或同等库学到很多东西。他们会提高你对C++和设计模式的理解。我认为这是你可以做的最好的事情来提高你的编码技能。

1

如果你是在做你的代码作为跨平台尽可能真正感兴趣的,使用尽可能多的编译器成为可能。如果您使用Windows和Linux,至少应使用VC和gcc。这将确保您不使用编译器特定的功能,并且不依赖于系统特定的行为。如果您有权访问它们,请使用更多编译器(英特尔,IBM等)和操作系统(OS X,Solaris)。

2

这个答案是非常好,你可以做一个列表,找到在哪里是开始。但我认为你应该阅读一些关于“移植应用程序”的文章。与跨平台开发不相关,但是这会给你很大的关于跨平台开发的观点。在跨平台开发,更多的进口事情之一就是像“端”(字节命令 - 字节顺序可以显示tehnologies或平台的差异)

2

使用升压内存问题。他们会为您处理跨平台的事情。

boost::filesystem是一个很好的例子