c++ - 定义一个深度/维度未知的 C++ 模板

标签 c++ templates

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

bin 的定义如下

template<typename T>
class Bin {
 float minRange, maxRange;
 vector<Bin<either Bin or ObjectType>> bins;
}

这个定义是递归的。所以在运行时用户定义直方图的维度

so if its just 1-dimension, then
Bin<Obj>
while 3-dimensions
Bin<Bin<Bin<Obj>>>

这可能吗?

问候

最佳答案

当然,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;
};

您只能在一定程度上指定运行时的维度。如果它受固定值约束,您甚至可以动态选择合适的类型。但是,请考虑使用一维 vector 而不是多维锯齿状 vector !

关于c++ - 定义一个深度/维度未知的 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10963552/

相关文章:

c++ - Variadic 类模板和继承 - 默认编译器生成的构造函数

java - 关于通用报告引擎的建议

ruby-on-rails - 我应该使用模板来呈现 JSON 还是在 RoR 中使用 Controller 返回 JSON?

c++ - 应该如何使用静态/非静态函数?

c++ - 编译时输出一个模板类名

c++ - 推导 lambda 函数中的模板参数及其结果

c++ - 使用类的 'this' 指针的 boost::intrusive_ptr 构造函数歧义

c++ - 在模板化类型中用其他类型递归替换类型

c++ - 同时接受const和非const参数的模板方法

c++ - 是否有可能获得指向通用 lambda 显式实例化的指针?