的情況是,我有一個項目數組,並且項目有一個數組裏面。但是,我想在聲明時將數組放在可變長度內,但在編譯時調整大小。使用模板使不同長度的物品停留在堆疊上?
所以,我想是這樣的:
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