定义具有未知深度/维度的c ++模板

Moa*_*sry 0 c++ templates

我想写一个n维直方图类.它应该是包含其他箱子等的箱子形式,其中每个箱子包含最小和最大范围,以及指向下一个维度箱子的指针

bin被定义为

template<typename T>
class Bin {
 float minRange, maxRange;
 vector<Bin<either Bin or ObjectType>> bins;
}
Run Code Online (Sandbox Code Playgroud)

这个定义是递归的.因此,在运行时,用户定义直方图的维度

so if its just 1-dimension, then
Bin<Obj>
while 3-dimensions
Bin<Bin<Bin<Obj>>>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

问候

bit*_*ask 5

当然,C++ 11具有模板的可变长度参数列表.即使没有C++ 11,如果所有维度都具有相同的类型,也可以使用专门化:

template <typename T, unsigned nest>
struct Bin {
  std::vector<Bin<T, (nest-1)> > bins;
};

template <typename T>
struct Bin<T,0> {
  T content;
};
Run Code Online (Sandbox Code Playgroud)

您只能在运行时将维度指定到一定程度.如果它受固定值限制,您甚至可以动态选择适当的类型.但是,请考虑使用一维向量而不是多维锯齿状向量!