【发布时间】:2014-06-20 06:35:14
【问题描述】:
我想知道,为什么 C++11 中的参数包扩展如此有限——这只是 C++11 标准中的疏忽吗?为什么不能只做bar(args)...;?有可能比我做得更好吗?
#include <iostream>
int bar(int i)
{
std::cout << i << ' ';
return 0;
}
template <typename T>
void boo(T t)
{
bar(t);
}
template <typename T, typename... Args>
void boo(T t, Args&&... args)
{
bar(t);
boo(args...);
}
template <typename... Args>
void dummy(Args&&... args)
{
}
template <typename... Args>
void foo(Args&&... args)
{
dummy(bar(args)...);
std::cout << std::endl;
int dummy1[sizeof...(Args)] = { (bar(args), 0)... };
std::cout << std::endl;
boo(args...);
}
int main()
{
foo(1, 3, 5);
}
【问题讨论】:
-
可能是因为潜在的歧义。此外,C++ 习惯于实现尽可能少的功能,以使某些事情并非完全不可能。
-
“你只需为你使用的东西付费”,对吗?
-
将“dummy”重命名为“for_each_arg”,你就赢了。 :-)
-
@HowardHinnant 注意 bar() 必须返回一些东西,所以需要更多的代码来包装 void 函数
-
是的,我很熟悉...