【问题标题】:C++ class specifier alignas option via template通过模板的 C++ 类说明符 alignas 选项
【发布时间】:2021-03-06 10:09:42
【问题描述】:

能否使用 C++ 模板参数来控制类本身的说明符以尽量减少一些代码重复?

例如:我有一个类,我想在带有alignas 说明符的并发上下文(和容器)中使用,也想在没有alignas 说明符的单线程上下文中使用它。类的大小很小(20B)——小于一个高速缓存行。我确实需要在两个班级之间进行复制。现在我已经复制了两个类的两个定义的代码,除了上述说明符之外,它们大部分是相同的。模板或其他方式是否允许一个定义,一个有alignas,一个没有?

【问题讨论】:

  • 为什么并发上下文需要alignas
  • 您会在单个项目中使用带有和不带有alignas 说明符的类吗?
  • 你说你需要能够在类的两个版本之间进行复制。但请记住,模板不是继承。因此,一旦编译实际开始,它们就会被视为完全不同的类。
  • @Eugene 防止在生产者-消费者情况下的虚假共享
  • @NathanOliver 是的

标签: c++ alignas


【解决方案1】:

你可以这样做:

template <size_t alignment = 0>
class alignas(alignment) C {
    // ...
};

现在C&lt;&gt; 将使用其定义的默认对齐方式(因为 alignas(0) 被忽略),而您可以使用 例如 C&lt;16&gt; 强制对齐 16。

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多