的情况是,我有一个项目数组,并且项目有一个数组里面。但是,我想在声明时将数组放在可变长度内,但在编译时调整大小。使用模板使不同长度的物品停留在堆叠上?
所以,我想是这样的:
class2<16>[] = new class2<16>[2048*1024];
或什么的。希望你明白这个主意。
很明显,它有固定的数组里面很容易,但问题是数组可以是巨大的,所以我不想有2048 * 1024调用新的,所以我绝对不希望class2调用任何新的或删除方法。
这甚至可能吗?
的情况是,我有一个项目数组,并且项目有一个数组里面。但是,我想在声明时将数组放在可变长度内,但在编译时调整大小。使用模板使不同长度的物品停留在堆叠上?
所以,我想是这样的:
class2<16>[] = new class2<16>[2048*1024];
或什么的。希望你明白这个主意。
很明显,它有固定的数组里面很容易,但问题是数组可以是巨大的,所以我不想有2048 * 1024调用新的,所以我绝对不希望class2调用任何新的或删除方法。
这甚至可能吗?
您可以为您的内部数组大小的模板参数。例如: -
template<int siz>
class Item{
int arr[siz];
};
int main() {
Item<15> items[10];
return 0;
}
谢谢,我认为这将起作用。 – 2010-01-19 21:03:18
std::tr1::array
(除C++ 0x中的标准库)和boost::array
已经存在,服用两个模板参数:项目的类型和数量:
std::tr1::array<int, 16> something;
你可以有
std::vector<std::tr1::array<int, 16> > lots_of_arrays(2048*1024);
只有一个动态异体:在运行 -time与标准::向量容器任何数量的这些阵列的这里涉及的阳离子
你的意思是像'模板<为size_t itemSize>结构A {A(为size_t ITEMCOUNT){}};'? – 2010-01-19 12:01:20
并且在堆栈上创建巨大的结构不会导致问题? – 2010-01-19 12:46:00
它不会在堆栈上。我同意使用堆叠可能是一个更大的问题。我想要的是对整个数组进行一次分配,但如果这些类有自己的分配(动态),那么这是不可能的。 – 2010-01-19 20:59:37