У меня есть функция C, которая принимает настраиваемую структуру и переменное количество аргументов с разными типами (ints/strings/other custom structure ...). Из-за структуры функция может определить, для какого типа каждый аргумент, для его обработки.Передача переменных параметров функции
void doStuff(MyStruct *S,...){ <function code> }
Теперь мне нужна другая функция, которая может передавать число постоянных аргументов «n» в «doStuff». То есть что-то вроде этого:
void useDoStuff(Mystruct *S, int n){ //lets say n=4
va_list arguments;
int i;
for(i = 0 ; i < n ; i++){
if(i%2) arguments.add(6); //example condition for the arguments
else arguments.add("Hello");
}
doStuff(S, arguments); // doStuff(S, "Hello", 6, "Hello", 6);
}
Естественно, что это не будет работать, потому что va_list не может быть использован, как это (использовал его только грубо «визуализировать» то, что нужно). К сожалению, ни структура, ни функция doStuff не могут быть изменены, и мне нужно найти обходной путь. Существует ли такое обходное решение?
Это не C, это C++ (C не имеет явных ссылок). Это проблема XY. Почему вы пытаетесь создать гетерогенный список аргументов? Что такое _actual_ определение 'doStuff'? – Tim
Да, вы правы, нет ссылок на C (не знаю, почему я использовал их вместо указателей в примере). В любом случае, на самом деле не имеет значения, что делает makeStuff, но я должен передать неизвестное количество постоянных аргументов, которые передают определенные условия. –
Цитата: «Естественно, это не сработает, потому что va_list нельзя использовать как это (использовал его только для того, чтобы грубо« визуализировать », что нужно)». Я имею в виду ... у va_list есть функция «добавить»? - нет. –