接口实现惯用语
Interface implementation idioms
我正在尝试编写将在嵌入系统上使用的跨平台库(性能非常重要)。
我曾经检查过 PIMPL idiom,它看起来不错,但我有点害怕动态对象分配,这是一种繁重的操作(我将分配很多 classes).
我还尝试根据目标系统在 IDE 中附加实现文件。
通过这个技巧,我认为我获得了很好的性能但降低了代码清晰度,并且不得不使用预处理器在 class 系统因变量中定义。
谁能告诉我以上哪种成语最适合我的情况,或者如果有更好的,请说出它的名字。
谢谢。
PIMPL 成语主要用于编译防火墙.
如果 class A
是使用 pimpl idiom 实现的(因此有例如 A
和 A_impl
),那么 A
的客户做不需要查看 A_impl
的定义或包含任何私有变量的头文件或它的其他实现细节。
如果您实际上并不关心这个编译防火墙,而更关心动态分配,那么您可以使用的 'faster' 习惯用法是 静态多态性 ,基于在 CRTP 上。
当您使用 CRTP 时,您可以让相同的方法出现在各种不同的子classes 中,而不会产生虚拟调度的成本。但缺点是,大多数使用 subclasses 的函数都需要是模板函数,因此会导致大量额外的代码生成。这是静态多态性和动态多态性(通过例如虚拟分派)之间的基本权衡。
我不完全确定在嵌入式系统中为此使用 CRTP 有多常见——由于代码生成问题,使用 pimpl 或虚拟分派可能仍然更常见。 YMMV.
我正在尝试编写将在嵌入系统上使用的跨平台库(性能非常重要)。
我曾经检查过 PIMPL idiom,它看起来不错,但我有点害怕动态对象分配,这是一种繁重的操作(我将分配很多 classes).
我还尝试根据目标系统在 IDE 中附加实现文件。
通过这个技巧,我认为我获得了很好的性能但降低了代码清晰度,并且不得不使用预处理器在 class 系统因变量中定义。
谁能告诉我以上哪种成语最适合我的情况,或者如果有更好的,请说出它的名字。
谢谢。
PIMPL 成语主要用于编译防火墙.
如果 class A
是使用 pimpl idiom 实现的(因此有例如 A
和 A_impl
),那么 A
的客户做不需要查看 A_impl
的定义或包含任何私有变量的头文件或它的其他实现细节。
如果您实际上并不关心这个编译防火墙,而更关心动态分配,那么您可以使用的 'faster' 习惯用法是 静态多态性 ,基于在 CRTP 上。
当您使用 CRTP 时,您可以让相同的方法出现在各种不同的子classes 中,而不会产生虚拟调度的成本。但缺点是,大多数使用 subclasses 的函数都需要是模板函数,因此会导致大量额外的代码生成。这是静态多态性和动态多态性(通过例如虚拟分派)之间的基本权衡。
我不完全确定在嵌入式系统中为此使用 CRTP 有多常见——由于代码生成问题,使用 pimpl 或虚拟分派可能仍然更常见。 YMMV.