gpt4 book ai didi

c++ - 按模板类型对齐成员变量

转载 作者:搜寻专家 更新时间:2023-10-30 23:50:59 24 4
gpt4 key购买 nike

我想根据类模板类型对齐我的成员变量,但我不确定这是否真的可行。

以下是我想做的(非常)简单的示例

template<int Align>
class MyClass
{
private:
struct MyStruct
{
// Some stuff
} __declspec(align(Align));

__declspec(align(Align)) int myAlignedVariable;
};

所以我希望 Align 成为每个实例的变量,并且只有通过它才能确定类内容的对齐值。

不幸的是,我总是得到以下错误

error C2975: 'test::MyClass' : invalid template argument for 'Align', expected compile-time constant expression

那么,这实际上是可能的,还是只能使用固定的编译时间常量才能实现对齐?如果没有,有人能想出解决办法吗?

谢谢:)

最佳答案

自定义对齐不在标准中,因此编译器如何处理它取决于他们 - 看起来 VC++ 不喜欢将模板与 __declspec 组合。

我建议使用专门化来解决问题,如下所示:

template<int A> struct aligned;
template<> struct aligned<1> { } __declspec(align(1));
template<> struct aligned<2> { } __declspec(align(2));
template<> struct aligned<4> { } __declspec(align(4));
template<> struct aligned<8> { } __declspec(align(8));
template<> struct aligned<16> { } __declspec(align(16));
template<> struct aligned<32> { } __declspec(align(32));

然后从您的代码中派生:

template<int Align>
class MyClass
{
private:
struct MyStruct : aligned<Align> {
// stuff
};
};

不幸的是,这破坏了 MyStruct 的 POD 特性。它也不适用于内置/现有类型,因此您必须为这些类型使用包装器。

aligned_t<int, 4> myAlignedVariable;

关于c++ - 按模板类型对齐成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/388934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com