【问题标题】:Interface implementation idioms接口实现成语
【发布时间】:2015-12-26 01:33:44
【问题描述】:

我正在尝试编写将用于嵌入式系统的跨平台库(性能非常重要)
我曾经检查过 PIMPL idiom,看起来不错,但我有点害怕动态对象分配,这是一种繁重的操作(我将在其中分配很多类)。
我还尝试根据目标系统在 IDE 中附加实现文件。
通过这个技巧,我认为我获得了很好的性能,但降低了代码清晰度,并且不得不使用预处理器在类系统依赖变量中定义。
有人可以告诉我以上哪种习语最适合我的情况,或者如果有更好的,请说出它的名字。
谢谢。

【问题讨论】:

  • 拥有一个资源紧张的系统,您应该避免抽象并专注于建模数据。我想一个 PIMPLE 不会有什么好处。

标签: c++ performance interface cross-platform idioms


【解决方案1】:

PIMPL 成语主要用于其作为编译防火墙的作用。

如果类A是使用pimpl idiom实现的(例如AA_impl),那么A的客户端不需要看到A_impl的定义或者包含头部任何私有变量或它的其他实现细节的文件。

如果您实际上并不关心这个编译防火墙并且更关心动态分配,那么您可以使用的“更快”成语是基于 CRTP 的静态多态性

当您使用 CRTP 时,您可以获得相同的方法出现在各种不同的子类中,而不会产生虚拟调度的成本。但缺点是,大多数使用子类的函数都需要是模板函数,因此会导致大量额外的代码生成。这是静态多态性和动态多态性(通过例如虚拟调度)之间的基本权衡。

我不完全确定在嵌入式系统中为此使用 CRTP 有多普遍——由于代码生成问题,使用 pimpl 或虚拟调度仍然可能更常见。 YMMV。

【讨论】:

  • 静态多态不需要 CRTP。
  • 这是真的,我不认为我另有暗示。做一个界面,虽然这似乎是一件很合适的事情。
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多