如何将可变数量的参数从一个函数传递到另一个函数?

时间:2010-09-08 23:43:45

标签: c++ variadic-functions

有没有办法直接将可变数量的参数从一个函数传递给另一个函数?

我想实现如下的最小解决方案:

int func1(string param1, ...){
  int status = STATUS_1;
  func2(status, param1, ...);
}

我知道我可以使用类似下面的内容执行此操作,但是此代码将被重复多次,因此我希望尽可能保持简约,同时保持函数调用非常短

int func1(string param1, ...){
  int status = STATUS_1;
  va_list args;
  va_start(args, param1);
  func2(status, param1, args);
  va_end(args);
}

谢谢!

3 个答案:

答案 0 :(得分:7)

不,你必须根据你的第二个例子使用va_list传递varargs。

这只是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)

答案 1 :(得分:3)

只需将args作为va_list类型的参数传递给func2

答案 2 :(得分:0)

也许您可以尝试在结构中包装参数。

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;
}

我有时会在重构期间参数列表发生很大变化时使用该技巧。

我不确定你的问题是否可以解决你的问题。

-

值得注意的是,通过在结构中定义typedef等可以将相同的东西用于模板(我通常总是在我的代码中使用类,因为在c ++中struct和class之间基本上没有区别)普通会员它可以解决必须维护代码的问题,这些代码在重构或开发过程中会发生很大的变化。