我正在为嵌入式使用编写 C++ 库,所以它必须是 1) 高效的;2)由于“高效”不能简化为静态约束集,因此让程序员根据具体情况控制代码速度与大小的权衡。为了满足这一需求,我考虑让程序员控制大型方法子集的内联能力。我可以想到以下模式:
class Foo {
ALWAY_INLINE void foo_i() { ... }
NEVER_INLINE void foo_ni() { foo_i(); }
#if DEFAULT_INLINE
ALWAY_INLINE void foo() { foo_i(); }
#else
NEVER_INLINE void foo() { foo_i(); }
#endif
}
在这里,ALWAY_INLINE/NEVER_INLINE 是为特定于编译器的属性定义的(我很高兴只针对 gcc)。这个方案提供了 3 个版本的方法:一个总是内联的,一个永远不会内联的,以及一个具有“默认”可内联性的“主”方法(基于我作为库作者的决定)。
现在,我不能 100% 确定这种方案,特别是关于 _i/_ni 后缀和冗长(后者可以用宏来处理,但这可能导致比后缀更加晦涩难懂)。
我想知道,是否有任何最佳实践来处理 C++ 中的此类元编程问题,或者至少现有示例如何在其他库中处理此问题?
请注意,“让编译器控制可内联性”不是一个可接受的答案 - 谈话正是关于明确控制它。