Принудительное удаление скобок в вызове функций 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)
(Контейнер стабильный указатель)