使用模板制作不同长度的物品?

时间:2010-01-19 11:55:03

标签: c++ templates

情况是我有一个项目数组,这些项目里面有一个数组。但是,我想在声明时将数组置于可变长度内,但在编译时可以调整大小。

所以我想要这样的东西:

class2<16>[] = new class2<16>[2048*1024];

或者其他什么。希望你明白了。

显然使其内部有固定阵列很容易,但问题是阵列可能很大,所以我不想让2048 * 1024调用new,所以我绝对不希望class2调用任何新的或者删除方法。

这甚至可能吗?

2 个答案:

答案 0 :(得分:5)

您可以为内部数组大小创建模板参数。例如: -

template<int siz>
class Item{
  int arr[siz];
};

int main() {
  Item<15> items[10];
  return 0;
}

答案 1 :(得分:3)

std::tr1::array(除了C ++ 0x中的标准库)和boost::array已经存在,采用两个模板参数:项目的类型和数量:

std::tr1::array<int, 16> something;

你可以使用std :: vector容器在运行 -time中拥有任意数量的数组:

std::vector<std::tr1::array<int, 16> > lots_of_arrays(2048*1024);

这里只涉及一个动态分配。