首页 > 解决方案 > 编译器找不到专门的类模板

问题描述

我想使用部分模板专业化,但似乎我遗漏了一些东西。这是我尝试过的:

template<class T1, class T2>
class AClass {};

template<class T>
class AClass<T, T> {}; // specialized class.

AClass<int,float> aClassIntFloat; // works just fine

AClass<int, int> aClassIntInt; // works just fine

AClass<int> specializedIntClass; //"error: wrong number of template arguments (1, should be 2)"

我错过了什么?

标签: c++templatestemplate-specializationclass-template

解决方案


首先,您已经成功定义了部分专业化:

  • AClass<int, int>class AClass<T, T> 将用 T=int 实例化
  • AClass<int,float>class AClass<T1, T2>将使用 T1=int 和 T2=float进行实例化

您可以通过添加公共测试方法并为 and 调用它来轻松检查这一点aClassIntFloataClassIntInt在线演示)。您会发现将使用为两个相同类型定义的部分特化。

您还可以进行另一个部分专业化,例如:

template<class T2>
class AClass<double, T2>  { public: void test(){cout<<"ADT2"<<endl;}};

AClass<double, int> aClassDoubleInt; // works also fine

部分特化可让您修复一些参数,但不是全部。但最后,您的模板需要两个参数,而您必须提供两个参数。唯一的问题是实例化了哪个专业(在线演示)。


推荐阅读