我想在variadic模板的帮助下将多维数组定义为vector<vector<....>>
,但偶然发现定义类型initializer_list<initializer_list<...>>
是不可能的,这是初始化列表构造函数所需要的。这可以通过以下代码进行简要说明
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;
};
编译器显示&#34;错误C2923:&#39; std :: initializer_list&#39; :&#39; MyArr :: ListType&#39;不是参数&#39; _Elem&#39;&#34;的有效模板类型参数。
定义ListType
类型的正确方法是什么?
谢谢你的回答。
答案 0 :(得分:5)
MyArr<T, dim - 1>::
后面的所有内容都是依赖名称,因为T
和dim
都是模板参数,因此,typename
关键字是必须表明它是一种类型。
template<class T, size_t dim>
class MyArr : vector < MyArr < T, dim - 1 >>
{
public:
typedef initializer_list<typename MyArr < T, dim - 1 >::ListType> ListType;
// ^^^^^^^^
};
或:
template<class T, size_t dim>
class MyArr : vector < MyArr < T, dim - 1 >>
{
public:
using ListType = initializer_list<typename MyArr < T, dim - 1 >::ListType>;
// ^^^^^^^^
};