为了账号安全,请及时绑定邮箱和手机立即绑定

如何在所有可变参数模板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 关注
  • 517 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信