簡體   English   中英

如何將可變數量的參數從一個函數傳遞到另一個函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM