通过对齐重新排序模板中的成员

时间:2015-07-22 10:31:52

标签: c++11 template-meta-programming

假设我编写以下代码:

template<typename T1, typename T2>
struct dummy {
  T1 first;
  T2 second;
};

我想知道如何通过降序来命令模板类中的成员。换句话说,我希望上面的课程是

struct dummy {
  int first;
  char second;
};

实例化为dummy<int, char>时。但是,我想获得

struct dummy {
  int second;
  char first;
};

在案例dummy<char, int>

2 个答案:

答案 0 :(得分:0)

在大多数平台上,std::pair的填充仅在“自然”对齐时发生。对于任何一种订单,这种填充都会相同。

对于std::tuple,某些安排可能比其他安排更有效,但是库可以选择它喜欢的任何内存布局,因此您添加的任何TMP都只是猜测。

一般来说,是的,您可以使用模板定义排序算法,但这将是一项相当有用的工作。

答案 1 :(得分:0)

这可以做到,唯一的问题是命名,你如何命名你的领域? 我做了你不久前提出的问题,我使用了std::tuple和一些元编程技巧,我做了一个合并排序来重新排序模板参数,这很有趣(如果你喜欢函数编程) )。 对于命名,我使用了一些宏来访问字段。

我真的很鼓励你自己做,理智上真的很有趣,但如果你想看一些代码,请告诉我!