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

时间:2014-06-19 21:38:39

标签: c++ c++11

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

1 个答案:

答案 0 :(得分:3)

The reference提到允许参数包扩展的不同上下文。因此,更简洁的方法是

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

如果条形的返回类型无效,则无效。