0
我想用variadic模板的幫助定義多維數組,但偶然發現無法定義類型initializer_list<initializer_list<...>>
,這是initializer-list-constructor所需要的。這可以簡單地通過下面的代碼模板內的遞歸類型定義
template<class T, size_t dim>
class MyArr : vector < MyArr < T, dim - 1 >>
{
public:
typedef initializer_list<MyArr < T, dim - 1 >::ListType> ListType;
//using ListType = typename initializer_list<MyArr < T, dim - 1 >::ListType>;
};
template<class T>
class MyArr<T, 1> : vector < T>
{
public:
typedef initializer_list<T> ListType;
};
編譯器會顯示來證明「:‘的std :: initializer_list’:錯誤C2923‘myArr,該:: ListType’不是參數‘_Elem’有效的模板類型參數」。
定義ListType
類型的正確方法是什麼? 感謝您的回答。
是的,這個工作,非常感謝。我仍然不明白'typename'的位置背後的邏輯。 – 2014-09-12 21:09:07
@AlexB。它出現在你知道的某個類型之前,但是編譯器不能推斷出它是一個類型。例如,如果您專門爲MyArr設置了一個'static int ListType',那麼在'MyArr '中,'MyArr '不會命名一個類型。由於'T'還不知道,所以它不知道ListType是否是一種類型。你把'typename'放在整個東西之前,向編譯器提示它應該假定它是一個類型。 –
cdhowie
2014-09-12 21:15:37
我看不出編譯器如何推斷'dim-1'? – 0x499602D2 2014-09-12 21:17:32