我想要做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), ...);

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
您可以使用更簡單易讀的方法
template<typename... ArgTypes> void print(ArgTypes... Args)
{
for (const auto& arg : {Args...})
{
print(arg);
}
}
我在編譯資源管理器上使用了這兩種變體,使用O3或O2的gcc和clang產生的代碼完全相同,但是我的變體顯然更干凈。
- 3 回答
- 0 關注
- 547 瀏覽
添加回答
舉報
0/150
提交
取消