【发布时间】:2020-08-30 06:45:09
【问题描述】:
假设我正在制作某种通用集合,用户可能希望在 4-5 个点上选择实现 A 或 B。例如:
- 同质或异质
- 我们是否维护包含对象的计数,这比较慢
- 我们是否让它是线程安全的
我可以做 16 或 32 个实现,每个功能组合,但显然这并不容易编写或维护。
我可以将布尔标志传递给构造函数,该类可以在执行某些操作之前进行检查。但是,编译器并不“知道”这些参数是什么,因此每次都必须检查它们,并且仅检查足够的布尔标志本身就会造成性能损失。
所以我想知道是否可以以某种方式使用模板参数,以便在编译时编译器看到if (false) 或if (true),因此可以完全优化条件测试,如果为假,则条件代码。但是,我只发现模板作为类型的示例,而不是编译时常量。
主要目标是彻底消除对锁定互斥锁、递增和递减计数器等的调用,但此外,如果有某种方法可以从对象结构中实际移除互斥锁或计数器,那将是真正的最佳选择.
【问题讨论】:
-
if constexpr是在 C++17 中引入的。在此之前,模板专业化是唯一的选择。 -
@bipll 模板专业化?这适用于这里吗?