Я думаю о следующей проблеме:параметров для статических переменных
Давайте функцию слияния для слияния массивов, определенных в следующим образом:
// input is (const void*, size_t, const void*, size_t,...)
template<typename...ARGS>
MyArray Concatenation(ARGS...args)
И давайте пару структур со статическим свойства
struct A { static void* DATA; static size_t SIZE; };
struct B { static void* DATA; static size_t SIZE; };
struct C { static void* DATA; static size_t SIZE; };
Я хотел бы иметь метод:
template<typename...ARGS>
MyArray AutoConcatenation();
Где ARGS должна быть структурой с указанным статическим интерфейсом. следующие методы должны иметь один и тот же вывод:
AutoConcatenation<A, B, C>();
Concatenation(A::DATA, A::SIZE, B::DATA, B::SIZE, C::DATA, C::SIZE);
Мой вопрос заключается в том, чтобы осуществить расширение параметров пакета.
Я пробовал:
// not working
template<typename...ARGS>
MyArray AutoConcatenation()
{
return Concatenation((ARGS::DATA, ARGS::SIZE)...);
}
насчет расширения
ARGS::DATA... // Correct expansion of pointers
ARGS::SIZE... // Correct expansion of sizes
(ARGS::DATA, ARGS::SIZE)... // Seems to be expansion of sizes
Просто информация для консультантов. Я ищу реализацию метода AutoConcatenation, а не для его переоформления или для повторного оформления предыдущего кода, спасибо.
Что вы подразумеваете под * Concatenation *? – Zereges
Это не имеет значения. Решение не зависит от семантики функций. Для вашей информации, если DATA будет c строк, A :: DATA = "abc", A :: SIZE = 3, Concatenation (A :: DATA, A :: SIZE, A :: DATA, A :: SIZE) будет быть массивом с данными «abcabc» и размером 6. – user4663214