亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在所有可變參數模板args上調用函數?

如何在所有可變參數模板args上調用函數?

C++
holdtom 2019-12-25 14:04:29
我想要做template<typename... ArgTypes> void print(ArgTypes... Args){   print(Args)...;}并使其等效于此龐大的遞歸鏈:template<typename T, typename... ArgTypes> void print(const T& t, ArgTypes... Args){  print(t);  print(Args...);}其次是我要打印的每種類型的顯式單參數專門化。遞歸實現的“問題”是生成了大量冗余代碼,因為每個遞歸步驟都會導致新的N-1參數函數,而我想擁有的代碼只會為單個N-arg print函數生成代碼,并且最多具有N專門的print功能。
查看完整描述

3 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

C ++ 17折疊表達式:


(f(args), ...);

讓簡單的事情保持簡單;-)


如果調用某些可能返回帶有重載逗號運算符的對象,請使用:


((void)f(args), ...);


查看完整回答
反對 回復 2019-12-25
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

您可以使用更簡單易讀的方法


template<typename... ArgTypes> void print(ArgTypes... Args)

{

   for (const auto& arg : {Args...})

   {

      print(arg);

   }

}

我在編譯資源管理器上使用了這兩種變體,使用O3或O2的gcc和clang產生的代碼完全相同,但是我的變體顯然更干凈。


查看完整回答
反對 回復 2019-12-25
  • 3 回答
  • 0 關注
  • 547 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號