模板内的递归类型定义

Ale*_* B. 0 c++ variadic-templates

我想定义与可变参数模板的帮助下多维数组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;
};
Run Code Online (Sandbox Code Playgroud)

编译器显示"错误C2923:'的std :: initializer_list’:'myArr,该:: ListType’不是参数'_Elem’有效的模板类型参数".

定义ListType类型的正确方法是什么?谢谢你的回答.

Pio*_*cki 5

一切的背后MyArr<T, dim - 1>::是一个依赖名称,因为这两个Tdim是模板参数,因此,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;
    //                       ^^^^^^^^
};
Run Code Online (Sandbox Code Playgroud)

要么:

template<class T, size_t dim>
class MyArr : vector < MyArr < T, dim - 1 >>
{
public:
    using ListType = initializer_list<typename MyArr < T, dim - 1 >::ListType>;
    //                                ^^^^^^^^
};
Run Code Online (Sandbox Code Playgroud)