#include <iostream>
using namespace std;
template <class T1, class T2>
class A {
public:
void taunt() { cout << "A"; }
};
template <class T1>
class A<T1, T1> {
public:
void taunt() { cout << "B"; }
};
class B {};
class C {};
int main (int argc, char * const argv[]) {
A<B> a;
return 0;
}
我如何转换我的两个参数模板的一个参数模板?
上面的代码将给出关于一个编译错误“A一个;” 对于“错号的模板参数”。
模板特不能用于减少模板参数的个数,这样做,你应该使用默认设置一些参数。
所以为了让只有一个参数的使用情况,并作出使用打你的专业化,你需要为第二个参数,这是一样的第一个参数默认:
#include <iostream>
using namespace std;
template <class T1, class T2=T1>
class A {
public:
void taunt() { cout << "A"; }
};
template <class T1>
class A<T1, T1> {
public:
void taunt() { cout << "B"; }
};
class B {};
class C {};
int main (int argc, char * const argv[]) {
A<B> a;
a.taunt(); // Prints "B"
return 0;
}
您可以使用第二个实例化类型(显)默认:
template <class T1, typename T2 = void>
class A {
public:
void taunt() { cout << "A"; }
};