Как передать переменное количество аргументов из одной функции в другую? - PullRequest
4 голосов
/ 09 сентября 2010

Есть ли способ напрямую передать переменное число аргументов из одной функции в другую?

Я хотел бы достичь минимального решения, такого как следующее:знаю, что я могу сделать это, используя что-то вроде следующего, но этот код будет продублирован несколько раз, поэтому я хотел бы сохранить его как можно более минималистичным, при этом оставляя вызов функции очень короткимСпасибо!

Ответы [ 3 ]

7 голосов
/ 09 сентября 2010

Нет, вы должны передать varargs, используя va_list, как в вашем втором примере.

Это всего лишь 3 строки дополнительного кода, если вы хотите избежать дублирования этих строк, и func2 всегда одинаковили, по крайней мере, принимает те же параметры, сделайте из него макрос.

#define CALL_MY_VA_FUNC(func,param) do {\
        va_list args; \
        va_start(args,param);\
        func(param,param,args);\
        va_end(args); } while(0)
3 голосов
/ 09 сентября 2010

Просто передайте аргументы как параметр типа va_list в func2

0 голосов
/ 09 сентября 2010

Может быть, вы можете попробовать обернуть параметры в структуру.

struct Params
{
   int status;
   std::string param1;
};

void func1(Params& params)
{
   int status = params.status;
   func2(params);
}

void func2(Params& params)
{
   std::string param1 = params.param1;
}

Иногда я использую этот трюк, когда список параметров сильно изменяется во время рефакторинга.

Я не уверен по твоему вопросу, может ли это решить твою проблему.

-

Интересно отметить, что то же самое можно использовать для шаблонов, определив typedefs и тому подобное в структуре (я обычно всегда использую класс в своем коде, так как в основном нет различия между struct и class в c ++) нормальных членов. Это может быть решением проблемы необходимости поддерживать код с большим количеством шаблонов, которые сильно изменятся во время рефакторинга или разработки.

...