Принудительное удаление скобок в вызове функций Variadic

У меня есть два POD

struct A
{
   float x;
   float y;
};

struct B
{
   A a;
   int i;
}

и переменная функция, которая на месте назначает POD, используя (что я думаю, это) агрегат

template<typename T, class... Args>
void remake(T* location, Args&&... args)
{
   *T = { std::forward<Args>(args)... };
}

remake шаблон работает как я ожидаю, когда используется для структуры A

remake(a_ptr, 7.0f, 6.0f)

но ошибки при использовании для B без скобки: No instance of template function 'remake' matches argument list. Argument types are: (B*, {...}, int)

remake(b_ptr, {7.0f, 6.0f}, 9)

и работает, когда используется с B с (то, что я думаю,) брейс Elision

remake(b_ptr, 7.0f, 6.0f, 9)

Я чувствую, что первая форма моего вызова римейка (B*, ...) гораздо яснее в намерении, явно показывая, где вложенная структура берет свои данные, но непригодна для использования в текущей форме. Воистину, я чувствую, что ошибка может быть результатом тонкого взаимодействия между шаблонами переменных и списками инициализаторов (и их непонимания). Или что-то совершенно другое, что я пропустил полностью.

Возможно ли то, что я пытаюсь выполнить в форме первого римейка (B*, ...)? Если так, что я делаю неправильно, что мешает ему работать как положено?


Дополнение: Цель

Приложение, в котором я хочу использовать этот шаблон, представляет собой однородную структуру данных с повторным использованием памяти, которая содержит предварительно выделенные массивы для этих POD. Внешний объект может запросить создание POD, предоставив значения структуры, после чего структура данных находит неиспользуемую позицию массива и заполняет ее этими значениями. Так что римейк выглядит примерно так T* create(Args&&... args) (Контейнер стабильный указатель)

0 ответов

Другие вопросы по тегам