为什么参数包扩展如此有限

why parameter pack expansion is so limited?

本文关键字:扩展 参数 包扩展 为什么      更新时间:2023-10-16

我想知道,为什么参数包扩展在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);
}

参考提到了允许参数包展开的不同上下文中。更简洁的方法是

auto a = {bar(args)...};

如果bar的返回类型是void,这将不起作用