跨平台C++代码体系结构

Mac*_*Mac 15 c++ inheritance delegates cross-platform

我正在为我正在编写的应用程序开发平台抽象库,并努力想出一种将平台独立代码与平台特定代码分离的简洁方法.

我认为有两种基本方法可能:具有平台特定委托的平台无关类,或具有平台特定派生类的平台无关类.两种方法都有任何固有的优点/缺点吗?在任何一种情况下,建立委托/继承关系的最佳机制是什么,以使该流程对于平台无关类的用户是透明的?

我要感谢任何有关整体架构的建议,或者甚至是过去人们所做过的一些例子以及给定方法的优缺点.

编辑:回应那些暗示Qt和类似的人,是的,我故意"重新发明轮子",因为我不仅仅关注开发应用程序,我也对驱动我自己的平台抽象的智力挑战感兴趣图书馆.还是)感谢你的建议!

Joe*_*oeG 12

我正在使用平台中性头文件,在源文件中保留任何特定于平台的代码(在必要时使用PIMPL惯用法).每个平台中性标头每个平台都有一个平台特定的源文件,扩展名为*.win32.cpp,*.posix.cpp.平台特定的只能在相关平台上编译.

我还使用boost库(文件系统,线程)来减少我必须维护的平台特定代码的数量.

它是平台无关的类声明,具有特定于平台的定义.

优点:工作得相当好,不依赖于预处理器 - 不#ifdef MyPlatform,保持平台特定代码易于识别,允许编译器特定功能在平台特定源文件中使用,不会通过#including平台头污染全局命名空间.

缺点:使用带有疙瘩类的继承是很困难的,有时PIMPL结构需要它们自己的头,因此可以从其他平台特定的源文件中引用它们.

  • @matt:您可以使用公共源文件; foo.h(独立于平台),foo.cpp(包含公共代码),foo.win32.cpp,foo.posix.cpp.根据foo.cpp包含的内容,它可以单独编译然后链接,或只是#included到foo.win32.cpp和foo.posix.cpp (2认同)