如何将__declspec(align(16))与模板一起使用
How do you use __declspec(align(16)) with a template?
我正在尝试使我的class 16-byte
与__declspec(align(16))
对齐;但是它是一个模板类。
如果我把__declspec(align(16))
放在模板关键字之前,它会告诉我这里不允许使用变量属性。
如果我把它放在class关键字之前,那么整个类将变为无效,并且所有方法都显示错误。
那是怎么做到的呢?
这个实现可能回答了这个请求:
template <class T, std::size_t Align>
struct alignas(Align) aligned_storage
{
T a;
T b;
};
template <class T, std::size_t Align>
struct aligned_storage_members
{
alignas(Align) T a;
alignas(Align) T b;
};
int main(int argc, char *argv[]) {
aligned_storage<uint32_t, 8> as;
std::cout << &as.a << " " << &as.b << std::endl;
aligned_storage_members<uint32_t, 8> am;
std::cout << &am.a << " " << &am.b << std::endl;
}
// Output:
0x73d4b7aa0b20 0x73d4b7aa0b24
0x73d4b7aa0b30 0x73d4b7aa0b38
第一个结构(当然可以定义为一个类)是8字节对齐的,而第二个结构本身不是对齐的,而是每个成员都是8字节对齐。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 在将 new 与指针一起使用时,创建数组的指定长度