21

以下代码在 C++11 中是合法的。

template<int... N>
std::tuple<decltype(N)...> f()
{
    return std::make_tuple(7 + N...); 
}

这是什么意思?

4

1 回答 1

25

首先,看一下模板参数:template <int ... N>. 即使可以给 可变数量的模板参数f,它们都必须是类型int

现在,当您使用 时f<t1, t2, ..., tn>参数解包 (7 + N...)将遵循模式 7 + N并扩展为

7 + t1, 7 + t2, 7 + t3, ..., 7 + tn

因此,您最终得到一个元组,其中包含每个模板参数增加了七个。详细信息可在第 14.5.3 节可变参数模板 [temp.variadic] 中找到。

3. 包扩展由一个模式和一个省略号组成,其实例化会在列表中产生零个或多个模式的实例化 [...]。

于 2014-07-09T07:48:43.967 回答