#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 a;‘上给出一个编译器错误,因为’模板参数的数目错误‘。
发布于 2012-04-21 04:45:39
模板专门化不能用来减少模板参数的数量,要做到这一点,你应该对一些参数使用默认值。
因此,为了只允许使用一个参数,并使该用法符合您的专门化要求,您需要为第二个参数设置一个默认值,它与第一个参数相同:
#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;
}发布于 2012-04-21 04:41:49
您可以对第二个实例化类型使用(合理的)默认值:
template <class T1, typename T2 = void>
class A {
public:
void taunt() { cout << "A"; }
};https://stackoverflow.com/questions/10253219
复制相似问题