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

C++ 按模板类型对齐成员变量,c++,templates,C++,Templates,我想根据类模板类型对齐我的成员变量,但我不确定这是否可行 下面是我想做的(非常)简单的例子 template<int Align> class MyClass { private: struct MyStruct { // Some stuff } __declspec(align(Align)); __declspec(align(Align)) int myAlignedVariable; }; 那么,这实际上是可能的,还是只能使用固定的编译时常量进行

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

下面是我想做的(非常)简单的例子

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

  __declspec(align(Align)) int myAlignedVariable;
};
那么,这实际上是可能的,还是只能使用固定的编译时常量进行对齐?如果没有,有人能想出一个解决办法吗


谢谢:)

标准中没有自定义对齐,因此编译器如何处理它取决于他们-看起来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));
模板结构对齐;
模板结构对齐{}declspec(align(1));
模板结构对齐{}declspec(align(2));
模板结构对齐{}declspec(align(4));
模板结构对齐{}declspec(align(8));
模板结构对齐{}declspec(align(16));
模板结构对齐{}declspec(align(32));
然后从你的代码中得到:

template<int Align>
class MyClass
{
private:
  struct MyStruct : aligned<Align> {
    // stuff
  };
};
模板
类MyClass
{
私人:
结构MyStruct:对齐{
//东西
};
};
不幸的是,这打破了我的框架。它也不适用于内置/现有类型,因此您必须为这些类型使用包装器

aligned_t<int, 4> myAlignedVariable;
aligned\u t myAlignedVariable;

Boost已经解决了这个问题。他们使用()中的技术,该技术必须为对齐的任意类型保留足够的空间,但不能(不会)在构造时实际实例化该对象

他们的解决方案是分配一个简单的字节池(char数组),并使用in-placenew在所需位置构造对象。指定给在位新用户的地址可以是任意对齐方式


话虽如此,你是说你在问题中给出了一个非常简单的例子。通过实现一个类,其中每个成员都有一个用户指定的对齐方式,该对齐方式不会因每个成员而异,但会因每个类实例而异,您试图解决的实际问题是什么?

为什么不让他“对齐”MyStruct的第一个成员?然后它仍然是pod。这就是我目前在我们的分配模型中所做的,并且它运行良好。但有人要求,如果结构在分配器之外,我们可以确保执行对齐。老实说,我很高兴我们已经做到了,这也证实了这一点。
aligned_t<int, 4> myAlignedVariable;