C++11 c+中的模板+;11错误

C++11 c+中的模板+;11错误,c++11,templates,template-templates,C++11,Templates,Template Templates,我一直在阅读“C++模板,完整指南”的第5章,我已经看到了“模板”模板的概念,所以我自己也尝试了 在template类中,我声明了我的模板,如下所示: template <typename TipoClave, typename TipoDato, template <class Elem, class Alloc = allocator<Elem>> class Lista = vector> int main (void) {

我一直在阅读“C++模板,完整指南”的第5章,我已经看到了“模板”模板的概念,所以我自己也尝试了

在template类中,我声明了我的模板,如下所示:

template <typename TipoClave, typename TipoDato,
         template <class Elem, class Alloc = allocator<Elem>> class Lista = vector>
int main (void)
{
    Tabla<string,Alumno,array> tabla(200);
    ///< Some stuff

    return 0;
}
模板
这是有效的。当我尝试使用不同于默认容器的容器时,问题就出现了

我的班级如下:

class Tabla
{
public:
    struct Celda {
        TipoClave clave;
        TipoDato dato;
    };

    Tabla(unsigned tam)
    {
        t.resize(tam);
    }

///< Some other functions

private:
    typedef Lista<Celda> ListaDatos; 
    Lista<ListaDatos> t;
};
类Tabla
{
公众:
塞尔达结构{
蒂波克拉夫;
蒂波达托达托;
};
表A(未签名tam)
{
t、 调整大小(tam);
}
///<其他一些功能
私人:
typedef Lista ListaDatos;
Lista t;
};
然后,当我尝试从主程序中使用它时,如下所示:

template <typename TipoClave, typename TipoDato,
         template <class Elem, class Alloc = allocator<Elem>> class Lista = vector>
int main (void)
{
    Tabla<string,Alumno,array> tabla(200);
    ///< Some stuff

    return 0;
}
int main(无效)
{
Tabla Tabla(200);
///<一些东西
返回0;
}
但这一行
Tabla Tabla(200)未编译,给我一个错误,如:

test_tabla_t.cpp:在函数“int main()”中:test_tabla_t.cpp:20:27: 错误:模板参数列表中参数3的类型/值不匹配 对于“模板类列表A>类表格A”表格A 表A(200)


我试着使用
Tabla Tabla(200),它可以工作,所以我不知道如何解决此错误。

假设您尝试使用
std::array
,它不接受分配器模板参数。它的第二个参数是数组的大小

template< 
    class T, 
    std::size_t N 
> struct array;
模板<
T类,
标准:尺寸
>结构数组;
<>你没有提到你在C++方面有多丰富,但是既然你想了解更多,我会说我已经使用C++将近十年了,一方面可以用模板模板参数来计算次数。 在本例中,您希望
Lista
成为“类似于序列容器[1]的东西”,您可能希望阅读有关概念[2],这可能会使其成为C++20。它们允许您告诉编译器希望模板参数具有的接口

同时,将Lista声明为普通模板参数可能更容易

[1]
[2]