可以使用C++模板参数来控制类本身的说明符,以最大程度地减少一些代码重复吗?
例如:我有一个类,既要在带有alignas
说明符的并发上下文(和容器)中使用,又要在没有alignas
说明符的单线程上下文中使用。类的大小很小(20B)-小于高速缓存行。我确实需要在两个类(class)之间复制。现在,我为两个类的两个定义重复了相同的代码,除了上述说明符外,大部分都是相同的。模板是否可以允许一个定义,一个定义带有alignas
,一个没有定义?
最佳答案
您可以这样做:
template <size_t alignment = 0>
class alignas(alignment) C {
// ...
};
现在C<>
将具有其定义的默认对齐方式(因为alignas(0)
被忽略),而您可以使用例如C<16>
强制对齐16。