如何实例化模板类的模板

时间:2017-12-12 08:45:40

标签: c++ templates

我对“模板模板”的概念感到有点困惑。例如,这可以编译:

nameValues.Remove("key1");

我很困惑,template<typename X1> class T1 {}; template<class X2, template<typename X> class T > class TT {}; int _tmain(int argc, _TCHAR* argv[]) { TT<int, T1> tt1; //compile ok //TT<int, T1<int>> tt2; //compile error return 0; } 定义为类型参数tt1提供int,为模板类型参数X2提供T1,这些是一切都很好......但是T本身需要一个类型T1,如果没有提供,C ++编译器如何编译?

1 个答案:

答案 0 :(得分:3)

您需要区分类模板和类模板实例。实例化是一种实际类型,而模板本身不是一种类型,它更像是一个类型的名称。

参数T应该是一个模板,通俗地说一系列类型。对于tt1,您确实以T1

的形式提供

但是在失败的尝试中,您没有提供模板,您提供了一种类型(通过实例化T1)。 T1<int>不是模板,而是某个类。

我猜你抛出的是你命名TX)参数的事实。您提供的名称与TT的声明完全相同。它期望模板作为其第二个参数,而不是模板及其参数。事实上,X没有TT可供参考。您可以尝试,编译器会抱怨它不知道X是什么。