我想要做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 关注
- 517 浏览
添加回答
举报
0/150
提交
取消