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类型的正确方法是什么?谢谢你的回答.
一切的背后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;
// ^^^^^^^^
};
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)