На основании ваших комментариев мне кажется, что вы хотите что-то вроде
template<typename T, std::size_t N>
struct array_wrapper {
T array[N];
// might extend with the remaining `std::array` interface
};
//...
auto array = std::make_unique<array_wrapper<TypeA, 0x10000>>();
some_library_function(array->array);
Таким образом some_library_function
увидит встроенный массив типа TypeA
и длины 0x10000
, но с Dynami c продолжительность хранения.
Обратите внимание, что я не использую std::array
, потому что я не уверен, что существует гарантированный законный способ получить ссылку на базовый массив (а не его первый элемент), даже с reinterpret_cast
. По крайней мере, я уверен, что не было бы, если бы TypeA
не был типом стандартного макета.
Также обратите внимание, что std::make_unique
будет инициализировать массив массивом, что означает, что он будет равен нулю все элементы. Если у вас есть какая-то конкретная c причина производительности, чтобы избежать этого, вы можете использовать std::make_unique_default_init
вместо этого в C ++ 20 или (менее предпочтительно) до этого:
using array_type = array_wrapper<TypeA, 0x10000>;
auto array = std::unique_ptr<array_type>(new array_type);