【发布时间】:2014-03-31 04:09:53
【问题描述】:
在 C 中你可以使用 int a[] = {1,2,3,4,5},但 C++11 std::array<int> a = {1,2,3,4,5} 会给出“模板参数太少”的编译错误。有什么办法吗?
【问题讨论】:
在 C 中你可以使用 int a[] = {1,2,3,4,5},但 C++11 std::array<int> a = {1,2,3,4,5} 会给出“模板参数太少”的编译错误。有什么办法吗?
【问题讨论】:
您可以拥有的最好的是make_array,例如:
template<typename T, typename...Ts>
constexpr std::array<T, 1 + sizeof...(Ts)> make_array(T&& head, Ts&&...tail)
{
return {{ std::forward<T>(head), std::forward<Ts>(tail)... }};
}
【讨论】:
1 + sizeof...(Ts)?多余的空间有什么用?
1是第一个参数T head(我们从head推断类型)。
std::array 的实现:
template<typename T, std::size_t N>
struct array {
T array_impl[N];
};
所以这应该工作:
std::array<std::int, 5> a = {{ 1, 2, 3, 4, 5 }};
本质上就像(编译器同意去掉内大括号。
std::array<std::int, 5> a = { 1, 2, 3, 4, 5 };
见
【讨论】: