C++ 特定数据类型的模板类

C++ 特定数据类型的模板类,c++,class,oop,templates,C++,Class,Oop,Templates,(为了简单起见,对代码进行了简化) 我想创建一个带有模板ea的测试类,以及一个只带有模板ea的测试类。当我完成此操作并尝试编译代码时,出现以下错误: 错误C2976:“测试”:模板参数太少 注:见“测试”声明 错误C2244:“测试::输出”:无法将函数定义与 现有声明 错误C2662:'void Test::Output(void)':无法转换'this' 从“Test”到“Test&”的指针 错误C2514:“测试”:类没有构造函数 #包括 #包括 模板 课堂测试 { 公众: 测试(E*E=

(为了简单起见,对代码进行了简化) 我想创建一个带有模板ea的测试类,以及一个只带有模板ea的测试类。当我完成此操作并尝试编译代码时,出现以下错误:

错误C2976:“测试”:模板参数太少

注:见“测试”声明

错误C2244:“测试::输出”:无法将函数定义与 现有声明

错误C2662:'void Test::Output(void)':无法转换'this' 从“Test”到“Test&”的指针

错误C2514:“测试”:类没有构造函数

#包括
#包括
模板
课堂测试
{
公众:
测试(E*E=nullptr,A*A=nullptr):A(E),b(A){
无效输出();
私人:
E*a;
A*b;
};
模板
void测试::输出()
{

类模板不能被重载(函数模板可以),但只能被专门化。如果你想,它应该被重载

template <typename E>
class Test<E, E>
{
    ...
};

模板
void测试::输出()
{
...
}

不幸的是,您不能通过声明
模板typename E>类测试来“重载”类模板。类
测试必须采用两个模板参数

这里的解决方案是声明一个完全不同的模板类,或者使第二个模板参数成为可选的,并编写一个模板专门化:

class Dummy;
template <typename E, typename A = Dummy>
class Test
…

template <typename E>
class Test<E, Dummy>
类虚拟;
模板
课堂测试
…
模板
课堂测试

因此语法
testt(&a,&str);
仍然有效。

我可以将第二个模板设置为特定的数据类型(例如std::string)吗使用TestYes这样的测试,我知道这是可以这样做的。但是如果我想用模板模板定义两个模板参数来定义一个类模板测试,也用一个STD::String类型:@ CharlieLee来定义测试类的方法,我没有准确地回答你的问题。tial专门化成员函数?我的意思是我可以有一个类模板:例如Test(其中e和a都是模板),但同时定义特定函数(当a是std:)string@CharlieLee您必须进行某种专门化,类专门化(如我的答案所示)或成员函数专门化。
template<typename E>
void Test<E, E>::Output()
{
    ...
}
Test<int, int> t(&a, &str); // the partial specialization will be used
template <typename E>
class Test<E, std::string>
{
    ...
};
template<typename E>
void Test<E, std::string>::Output()
{
    ...
}
class Dummy;
template <typename E, typename A = Dummy>
class Test
…

template <typename E>
class Test<E, Dummy>