如何在所有可变参数模板args上调用函数?

我想要做


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功能。


holdtom
浏览 518回答 3
3回答

开心每一天1111

C ++ 17折叠表达式:(f(args), ...);让简单的事情保持简单;-)如果调用某些可能返回带有重载逗号运算符的对象,请使用:((void)f(args), ...);

慕盖茨4494581

您可以使用更简单易读的方法template<typename... ArgTypes> void print(ArgTypes... Args){&nbsp; &nbsp;for (const auto& arg : {Args...})&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; print(arg);&nbsp; &nbsp;}}我在编译资源管理器上使用了这两种变体,使用O3或O2的gcc和clang产生的代码完全相同,但是我的变体显然更干净。
打开App,查看更多内容
随时随地看视频慕课网APP