[英]How to pass variable number of arguments from one function to another?
有沒有辦法直接將可變數量的參數從一個函數傳遞給另一個函數?
我想實現如下的最小解決方案:
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);
}
謝謝!
不,你必須根據你的第二個例子使用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)
只需將args作為va_list
類型的參數傳遞給func2
也許你可以嘗試在結構中包裝參數。
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之間基本上沒有區別)而不是普通成員。 對於必須維護具有大量模板的代碼的問題,這可能是一種解決方法,這些模板在重構或開發過程中會發生很大變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.