【发布时间】:2017-11-07 14:23:59
【问题描述】:
所以我一直在努力学习更多关于 c++ 元编程的知识,但我一直在尝试设计一个可变长度数组的元组。
我想做的事情是这样的:
CustomArrays<float, 3, 2> arrays;
第一个参数“float”是数组将存储的数据类型。下面的参数是每个数组的长度。我可以制作一个这样的结构来接受这些参数:
template <typename T, uint... As> struct CustomArrays {};
我知道如果我只取一个参数而不是一个列表,我可以像这样存储数组:
template <typename T, uint A> struct CustomArrays { T data[A]; };
这就是我想要的,但使用扩展的子类,类似于元组可以做的事情。我在想一些事情:
template <typename T, uint A> struct CustomArrays {};
template <typename T, uint A, uint... As>
struct CustomArrays : CustomArrays<T, As...> {
T data[A];
};
我们的想法是像这样展开:
struct CustomArrays<float, 2, 3> : CustomArrays<float, 3> {
float data[2];
}
struct CustomArrays<float, 3> : CustomArrays {
float data[3];
}
struct CustomArrays {}
这当然不会编译,因为我们用不同的模板参数重新声明了相同的结构。我的问题是我怎样才能达到预期的结果。
【问题讨论】:
标签: c++ c++11 metaprogramming variadic-templates template-meta-programming