c++ - 编译器找不到专门的类模板
问题描述
我想使用部分模板专业化,但似乎我遗漏了一些东西。这是我尝试过的:
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)"
我错过了什么?
解决方案
首先,您已经成功定义了部分专业化:
AClass<int, int>
class AClass<T, T>
将用 T=int 实例化AClass<int,float>
class AClass<T1, T2>
将使用 T1=int 和 T2=float进行实例化
您可以通过添加公共测试方法并为 and 调用它来轻松检查这一点aClassIntFloat
(aClassIntInt
在线演示)。您会发现将使用为两个相同类型定义的部分特化。
您还可以进行另一个部分专业化,例如:
template<class T2>
class AClass<double, T2> { public: void test(){cout<<"ADT2"<<endl;}};
AClass<double, int> aClassDoubleInt; // works also fine
部分特化可让您修复一些参数,但不是全部。但最后,您的模板需要两个参数,而您必须提供两个参数。唯一的问题是实例化了哪个专业(在线演示)。
推荐阅读
- c# - 成功的ajax调用不返回成功函数
- python - 来自 AWS Python Lambda 客户端的 MySQL 错误 (2004 (HY000): Can't create TCP/IP socket (97))
- javascript - 制表符 - 将同一个表中的行移动到另一个组部分
- makefile - 默认 Makefile 位置?
- docker - Docker 还原更改
- pyspark - AWS Glue - 展平深度嵌套的 JSON
- python - 表格没有保存
- html - html文件中的自定义位置div?
- audiokit - AudioKit AKFader 自动化
- javascript - 有没有更有效的方法来编写这个涉及 FontAwesome 图标的函数?