如何模擬C數(shù)組初始化“int arr[]={e1,e2,E3,…}“行為與STD:數(shù)組?它獨(dú)特的初始化特性:int arr[] = { 1, 3, 3, 7, 0, 4, 2, 0, 3, 1, 4, 1, 5, 9 };我們不需要指定元素的數(shù)量,萬歲!現(xiàn)在用C+11函數(shù)迭代它std::begin和std::end從…<iterator> (或者你自己的變體你甚至不需要考慮它的大小。現(xiàn)在,是否有任何方法(可能是TMP)來實(shí)現(xiàn)與std::array?使用宏可以使它看起來更好看。*)??? std_array = { "here", "be", "elements" };編輯*根據(jù)各種答案匯編的中間版本如下:#include <array>#include <utility>template<class T, class... Tail, class Elem = typename std::decay<T>::type>std::array<Elem,1+sizeof...(Tail)> make_array(T&& head, Tail&&... values){ return { std::forward<T>(head), std::forward<Tail>(values)... };}// in codeauto std_array = make_array(1,2,3,4,5);并使用了所有酷C+11的東西:可變模板sizeof...rvalue引用完美轉(zhuǎn)發(fā)std::array當(dāng)然,均勻初始化忽略具有一致初始化的返回類型類型推斷(auto)可以找到一個(gè)例子這里.不過,正在對@Xaade的答案的注釋中指出的那樣,您不能用這樣的函數(shù)初始化嵌套類型。例子:struct A{ int a; int b; };// C syntaxA arr[] = { {1,2}, {3,4} };// using std::array??? std_array = { {1,2}, {3,4} };此外,初始化器的數(shù)量僅限于實(shí)現(xiàn)支持的函數(shù)和模板參數(shù)的數(shù)量。
3 回答

慕妹3242003
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
template<class T, class... Tail>auto make_array(T head, Tail... tail) -> std::array<T, 1 + sizeof...(Tail)>{ std::array<T, 1 + sizeof...(Tail)> a = { head, tail ... }; return a;}auto a = make_array(1, 2, 3);

繁星淼淼
TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
make_array
.
template<typename ret, typename... T> std::array<ret, sizeof...(T)> make_array(T&&... refs) { // return std::array<ret, sizeof...(T)>{ { std::forward<T>(refs)... } }; return { std::forward<T>(refs)... };}
- 3 回答
- 0 關(guān)注
- 339 瀏覽
添加回答
舉報(bào)
0/150
提交
取消