2

可以使用 C++ 模板参数来控制类本身的说明符以最小化一些代码重复吗?

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

4

1 回答 1

3

你可以这样做:

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

现在C<>将具有其定义的默认对齐方式(因为alignas(0)被忽略),而您可以使用eg C<16>强制对齐 16。

于 2020-11-23T17:10:44.387 回答