2010-01-19 49 views
2

的情况是,我有一个项目数组,并且项目有一个数组里面。但是,我想在声明时将数组放在可变长度内,但在编译时调整大小。使用模板使不同长度的物品停留在堆叠上?

所以,我想是这样的:

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

或什么的。希望你明白这个主意。

很明显,它有固定的数组里面很容易,但问题是数组可以是巨大的,所以我不想有2048 * 1024调用新的,所以我绝对不希望class2调用任何新的或删除方法。

这甚至可能吗?

+0

你的意思是像'模板<为size_t itemSize>结构A {A(为size_t ITEMCOUNT){}};'? – 2010-01-19 12:01:20

+2

并且在堆栈上创建巨大的结构不会导致问题? – 2010-01-19 12:46:00

+0

它不会在堆栈上。我同意使用堆叠可能是一个更大的问题。我想要的是对整个数组进行一次分配,但如果这些类有自己的分配(动态),那么这是不可能的。 – 2010-01-19 20:59:37

回答

5

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

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

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

谢谢,我认为这将起作用。 – 2010-01-19 21:03:18

3

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与标准::向量容器任何数量的这些阵列的这里涉及的阳离子