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