1
11
我正在使用平台中立的头文件,在源文件中保留任何特定于平台的代码(使用
PIMPL idiom
必要时)。每个平台中性报头在每个平台上都有一个特定于平台的源文件,扩展名如
我还使用boost库(文件系统、线程)来减少我必须维护的平台特定代码的数量。 它是具有平台特定定义的独立于平台的类声明。
赞成的意见:
工作得相当好,不依赖于预处理器-不
欺骗: 很难将继承与褶皱类一起使用,有时PIMPL结构需要它们自己的头,以便可以从其他平台特定的源文件引用它们。 |
2
4
另一种方法是使用独立于平台的约定,但在编译时替换特定于平台的源代码。
也就是说如果你
想象
组件,
每个模块必须使用
所以没有任何文件包含
|
3
3
看一看 ACE . 它使用模板和继承具有相当好的抽象性。 |
4
2
我可能会选择政策类型的东西:
在这样做和使用crtp进行常规模拟动态绑定之间没有太多的选择,因此通用的东西是基础,而派生类是特定的东西:
基本上在后一个版本中,
与使用委托的版本或使用继承的非模板版本相比,它们的优势在于您不需要任何虚拟函数。可以说,考虑到基于策略的设计和CRTP在第一次接触时有多可怕,这并不是一个整体的优势。 不过,在实践中,我同意Quamrana的观点,通常情况下,您可以在不同的平台上实现相同的功能:
|
5
0
你可能还想看看 poco :
|
6
0
如果您想使用一个完整的C++框架,可用于许多平台和许可的版权保护,则使用Qt。 |
7
0
所以…你不想简单地使用qt吗?对于使用C++的实际工作,我非常推荐它。它是一个绝对优秀的跨平台工具包。我刚刚写了几个插件让它在Kindle上工作,现在是PalmPre。Qt让一切变得轻松有趣。完全恢复活力,甚至。好吧,直到你第一次遇到qmodelindex,但是他们应该意识到他们过度设计了它,并且正在替换它;) 不过,作为一个学术练习,这是一个有趣的问题。作为一个轮子的发明者,我已经做过几次了。:) 简短的回答:我会和皮条客一起去。(qt源有大量示例) 我以前使用过基类和特定于平台的派生类,但结果通常比我想象的要混乱一些。我还使用某种程度的函数指针为平台特定的位完成了部分实现,对此我甚至不太满意。 这两次,我都有一种强烈的感觉,那就是我过度的架构设计,迷失了方向。 我发现在不同的文件中使用具有不同平台特定位的私有实现类(PIMPL)最容易编写 和 调试。然而。。。不要太害怕 #定义 或者两行,如果只是几行,并且非常清楚发生了什么。我讨厌乱七八糟的 γIFIFF 逻辑,但这里或那里的一两个可以真正帮助避免代码重复。 有了PIMPL,当您发现需要不同平台间实现的新功能时,您就不会不断地重构您的设计了。那就是龙。 在实现级别,隐藏在应用程序中…一些特定于平台的派生类也没有问题。如果两个平台实现定义得相当好并且几乎不共享数据成员,那么它们将是一个很好的候选者。想做就做 之后 意识到这一点,之前不是出于这样的想法,即一切都需要适合您选择的模式。 如果说有什么不同的话,我今天对编码最大的不满就是人们似乎很容易迷失在理想主义中。PIMPL是一种模式,具有特定于平台的派生类是另一种模式。使用函数指针是一种模式。没有什么可以说它们是互相排斥的。 然而,作为一个总的指导方针…从PIMPL开始。 |
Brendan · Java中从父类继承的对象的ArrayList 2 年前 |
Tali · 继承-您应该使用基类,还是它们只是子类的框架? 2 年前 |
mask2 · 如何轻松访问继承类的功能? 2 年前 |
Dimon · 父类中的Setter,以及一些没有参数的子类 2 年前 |
Miguerurso · Javascript类继承无法正常工作 2 年前 |
GuessMe · 返回新类对象的正确方法(也可以扩展) 2 年前 |
Daniel Lizik · 重写父类构造函数的子类成员初始值设定项 2 年前 |
i_know_what · 以基类作为参数重写错误的方法 2 年前 |