Я пытаюсь написать функцию, которая принимает переменное число параметров. Мое исследование побудило меня узнать о va_list и его методах (va_start, va_end, va_arg). Проблема в том, что параметры, которые я передаю в эту функцию, являются ссылками на объекты, созданные вне функции.Переменный список параметров в вызове функции
myClass obj1, obj2, obj3;
modifyObjects(3, obj1, 55, obj2, 33, obj, 35)
Вот реализация я попробовал:
void modifyObjects(int numObjects, ...)
{
va_list;
va_start(list, numObjects);
int i;
for(i=0;i<numObjects;++i)
{
myClass* tempObjectHandle = va_arg(list, &myClass); //get the reference to the object (THIS DOES NOT WORK!)
int size = va_arg(list, int); //get the size
tempObjectHandle->set(size); //tempObjectHandle should be pointing to object defined outside the function to set its size
}
va_end(list);
}
Есть ли способ для создания объектов и передать переменный список ссылок на те объекты, в функцию, так что, как только функция возвращает, все объекты были изменены?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Я также ограничен в стандарт C++ 03, что это то, что поддерживается ARM компилятором.
Спасибо!
Любая конкретная причина, по которой вы не можете использовать std :: vector
Поддерживает ли ваш компилятор поддержку на C++ 11? Какова конкретная проблема, которую вы пытаетесь решить, а не проблема, с которой вы столкнулись после того, как выбрали решение? (проблема не в вызове функции: проблема в том, что вызов функции должен решить) – Yakk
@ manasij7479: Ссылка на вектор не совпадает с вектором ссылок (что невозможно). – Beta