2014-02-27 115 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這並不回答他問的問題。 –