有没有办法直接将可变数量的参数从一个函数传递给另一个函数?
我想实现如下的最小解决方案:
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);
}
谢谢!
答案 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之间基本上没有区别)普通会员它可以解决必须维护代码的问题,这些代码在重构或开发过程中会发生很大的变化。