Скажем, у меня есть функция, которая принимает переменное количество параметров: я хочу вызвать эту функцию из другого места, создав список параметров, но не зная заранее, сколько параметров Мне нужно.Вызов переменной функции с неизвестным количеством параметров
Жаль, что не очень хорошо объяснил, надеюсь, этот код делает мой вопрос яснее:
void foo(int n, ...) {
va_list vl;
va_start(vl,n);
for (int i = 0; i<n; i++) {
// Do something to each passed variable
}
}
Эта функция бытии вызывается из этого один:
void bar(int howManyParams) {
// Here I want to call foo() with howManyParams parameters
// (values are irrelevant for the question)
//
// I.e. for howManyParams = 1, we should call foo(0)
// for howManyParams = 2, we should call foo(0,0)
// for howManyParams = 3, we should call foo(0,0,0)
// etc.
//
}
Использование массива здесь было бы намного более подходящим ... –
Как правило, для вызывающего есть какое-то соглашение, чтобы обозначить, сколько переменных функция должна выходить из стека. Например, printf() и его варианты имеют строку формата, где есть определенные маркеры формата, соответствующие переданным аргументам. Или иногда, соглашение состоит в том, что определенное значение, такое как ноль, будет означать конец аргументов. Вам решать эту конвенцию. –
Хотя, поскольку ваш вопрос отмечен C++, вы можете рассмотреть возможность передачи контейнера с известным размером, такого как std :: vector, вместо того, чтобы полагаться на переменные аргументы. –