2014-02-27 113 views

回答

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)... }}; 
} 
+0

为什么它是'1 + sizeof ...(Ts)'?什么是额外的空间? – 0x499602D2

+0

@ 0x499602D2:'1'用于第一个参数'T head'(我们从'head'推断出这个类型)。 – Jarod42

-3

实施的std ::数组:

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 }; 

请参阅

+1

所以你怎么能做到这一点不用说了数组的长度是5? –

+0

你确实指定了数组Rikayan,看看传递给模板的第二个模板参数。 –

+6

@DoryZidon这并不回答他问的问题。 –