Используя шаблоны, чтобы элементы различной длины оставались в стеке? - PullRequest
2 голосов
/ 19 января 2010

Ситуация такова, что у меня есть массив предметов, а у предметов есть массив внутри. Однако я хочу сделать массив внутри переменной длины во время объявления, но изменить его размер во время компиляции.

Так что я бы хотел что-то вроде:

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

Или что угодно. Надеюсь, вы поняли идею.

Очевидно, что сделать его с фиксированным массивом внутри легко, но проблема в том, что массив может быть ОГРОМНЫМ, поэтому я не хочу, чтобы 2048 * 1024 вызывало новые, поэтому я определенно не хочу, чтобы class2 вызывал новые или удалить методы.

Это вообще возможно?

Ответы [ 2 ]

5 голосов
/ 19 января 2010

Вы можете создать параметр шаблона для вашего внутреннего размера массива. Например: -

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

int main() {
  Item<15> items[10];
  return 0;
}
3 голосов
/ 19 января 2010

std::tr1::array (дополнение к стандартной библиотеке в C ++ 0x) и boost::array уже существуют, принимая два параметра шаблона: тип и количество элементов:

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

Вы можете иметь любое числоиз этих массивов на время выполнения с контейнером std :: vector:

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

Здесь задействовано только одно динамическое распределение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...