C++ 实例化typename本身为模板类的模板类

C++ 实例化typename本身为模板类的模板类,c++,C++,我想知道在typename本身有模板的情况下,如何初始化模板类。我要初始化的类如下所示: typedef TVec<TPair <TInt, TLst<TInt>> > TMyType; 或者我应该如何实例化TMyType对象 下面我提供了模板类的定义,因为它们在库中以及它们的默认构造函数 模板类及其默认构造函数的定义如下: typedef TVec<TPair <TInt, TLst<TInt>> > TMyType;

我想知道在typename本身有模板的情况下,如何初始化模板类。我要初始化的类如下所示:

typedef TVec<TPair <TInt, TLst<TInt>> > TMyType;
或者我应该如何实例化
TMyType
对象

下面我提供了模板类的定义,因为它们在库中以及它们的默认构造函数

模板类及其默认构造函数的定义如下:

typedef TVec<TPair <TInt, TLst<TInt>> > TMyType;
  • TVals向量

    template <class TVal> 
    class TVec{
    public:
       typedef TVal* TIter;
    protected:
      int MxVals; 
      int Vals;
      TVal* ValT;
    public:
      TVec(): MxVals(0), Vals(0), ValT(NULL){}
    ...
    };
    
    template <class TVal1, class TVal2>
    class TPair{
    public:
      TVal1 Val1;
      TVal2 Val2;
    public:
      TPair(): Val1(), Val2(){}
    ...
    };
    
  • 列表中的节点

    template <class TVal>
    class TLstNd{
    public:
      TLstNd* PrevNd;
      TLstNd* NextNd;
      TVal Val;
    public:
      TLstNd(): PrevNd(NULL), NextNd(NULL), Val(){}
    ...
    };
    
    模板
    类TLstNd{
    公众:
    TLstNd*PrevNd;
    TLstNd*NextNd;
    特瓦尔瓦尔;
    公众:
    TLstNd():PrevNd(NULL),NextNd(NULL),Val(){}
    ...
    };
    

  • TMyType myClass()
    不实例化任何对象,而是声明函数
    myClass
    的函数原型,该函数原型返回类型
    TMyType
    。您应该省略括号并使用
    TMyType myClass

    只需使用默认构造函数实例化对象即可。但是,使用空的parantese(
    TMyType myClass();
    )无法做到这一点。这将被解析为函数声明(名为
    myClass
    的函数,它不接受任何参数,并返回类型为
    TMyType
    的对象)。在尝试使用变量时,这很可能导致编译器错误。要默认构造变量,应省略括号:

    TMyType myClass;
    

    这不同于默认构造类型为TMyType的匿名对象,它需要parantises(因此您可以执行
    TMyType()
    ,但不能执行
    TMyType myVar();
    )。

    我运行了以下代码:

    typedef TVec<TPair<TInt,TLst<TInt>>> TMyType;
    TMyType obj(10,0);
    TInt val1;
    TLst<TInt> val2; 
    for (int i=0; i<10; i++)
    {
        obj[i].GetVal(val1,val2);
        printf("%d %i\n",val1,val2.Len());
    }
    
    return 0;
    
    typedef-TVec-TMyType;
    TMY型obj(10,0);
    丁醛1;
    TLst val2;
    对于(int i=0;i
    
    TMyType myClass;
    
    typedef TVec<TPair<TInt,TLst<TInt>>> TMyType;
    TMyType obj(10,0);
    TInt val1;
    TLst<TInt> val2; 
    for (int i=0; i<10; i++)
    {
        obj[i].GetVal(val1,val2);
        printf("%d %i\n",val1,val2.Len());
    }
    
    return 0;