2010-01-19 20 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與標準::向量容器任何數量的這些陣列的這裏涉及的陽離子