Синтаксис неограниченного массива: динамический или статический [закрыт] ⇐ C++
Синтаксис неограниченного массива: динамический или статический [закрыт]
Мне было трудно найти подходящее название для этого вопроса.
Мне представили специализацию std::unique_ptr для T[], которая оборачивает динамически выделяемый массив. Тем не менее, согласно cppreference Массивы с неизвестной границей, объявление неограниченного массива приводит к неполному типу, который должен быть инициализирован в какой-то момент, но всегда во время компиляции. Неограниченные массивы в конечном итоге ссылались только на массивы фиксированного размера.
Но в контексте частичной специализации шаблона параметр шаблона неограниченного массива, по-видимому, можно отображать как в динамических, так и в статических массивах. Вот фрагмент, иллюстрирующий это:
#include #include #include // выделенный объект подсчета данных (для целей отладки) структура данных { статический счетчик std::size_t; интервал значения = 0; данные() { ++count; } ~данные() { --count; } }; std::size_t данные::count = 0; // надеемся, что размер будет рассматриваться как константа времени выполнения std::size_t GetSize(std::size_t S) { return S + 1; } // простой шаблон для иллюстрации синтаксиса T[] // общая версия, из значения шаблон структура-обертка { Твал = Т(0); Wrapper(T value): val(value) { std::cout
Мне было трудно найти подходящее название для этого вопроса.
Мне представили специализацию std::unique_ptr для T[], которая оборачивает динамически выделяемый массив. Тем не менее, согласно cppreference Массивы с неизвестной границей, объявление неограниченного массива приводит к неполному типу, который должен быть инициализирован в какой-то момент, но всегда во время компиляции. Неограниченные массивы в конечном итоге ссылались только на массивы фиксированного размера.
Но в контексте частичной специализации шаблона параметр шаблона неограниченного массива, по-видимому, можно отображать как в динамических, так и в статических массивах. Вот фрагмент, иллюстрирующий это:
#include #include #include // выделенный объект подсчета данных (для целей отладки) структура данных { статический счетчик std::size_t; интервал значения = 0; данные() { ++count; } ~данные() { --count; } }; std::size_t данные::count = 0; // надеемся, что размер будет рассматриваться как константа времени выполнения std::size_t GetSize(std::size_t S) { return S + 1; } // простой шаблон для иллюстрации синтаксиса T[] // общая версия, из значения шаблон структура-обертка { Твал = Т(0); Wrapper(T value): val(value) { std::cout
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение