Я пытаюсь реализовать следующую функцию:
template<typename T, typename... ARGUMENTS>
std::unique_ptr<T[], HeapDeleter<T[]>> allocate_array( ARGUMENTS&&... arguments ) {
HeapAllocator<T> allocator;
/* Allocate array which size is equal to number of arguments given */
T* ptr = allocator.template allocate<sizeof...(ARGUMENTS)>();
if( ptr != nullptr ) {
/* TODO: There comes the magic... */
}
Первый шаг - выделить память для массива с помощью вызова allocate <> (). Это уже должно быть понятно, но я собираюсь добавить конструктор для каждого элемента массива в выделенной памяти, используя новое размещение. Там точно я хотел бы просить помощи ...
В основном для одного элемента я могу написать:
::new( static_cast<void*>( ptr ) T( /* One argument from arguments given */ );
Идея состоит в том, чтобы инициализировать n-й элемент с n-йаргумент в списке аргументов по адресу ptr + n, в идеале, с помощью конструктора перемещения, чтобы избежать ненужных копий.
Надеюсь, у вас есть идея ... Заранее большое спасибо за помощь!
Мартин