我正在尝试编写将用于嵌入式系统的跨平台库(性能非常重要)。
我曾经检查过 PIMPL idiom ,看起来不错,但是我对动态对象分配有点害怕,这是一种繁重的操作(我会分配很多类)。 />
另外,我试图在IDE中附加实现文件,具体取决于目标系统
通过这个技巧,我认为我的性能非常好,但代码清晰度降低,并且必须使用预处理器来定义类系统因变量。
有人可以告诉我上述哪种习语在我的情况下是最好的,或者如果有更好的成语,请说出它的名称。
感谢。
答案 0 :(得分:0)
PIMPL习惯用法主要用于编译防火墙。
如果使用pimpl习惯用法实现类A
(因此有A
和A_impl
),则A
的客户端不需要查看定义A_impl
的{{1}}或包含任何私有变量的头文件或其他实现细节。
如果您实际上并不关心这个编译防火墙并且更关心动态分配,那么您可以使用的“更快”的习惯是基于CRTP的静态多态。
使用CRTP时,您可以使用相同的方法在各种不同的子类中显示,而不会产生虚拟分派的成本。但缺点是,使用子类的大多数函数都需要是模板函数,因此会产生大量额外的代码。这是静态多态性和动态多态性之间的基本权衡(通过例如虚拟调度)。
我不完全确定在嵌入式系统中使用CRTP有多常见 - 由于代码生成问题,使用pimpl或虚拟调度可能更常见。 YMMV。