c ++ partial specialization:我怎样专门化这个模板< class T1,class T2>到此模板< class T1> ;? [英] c++ partial specialization: How can I specialize this template<class T1, class T2> to this template<class T1>?
问题描述
#include< iostream>
using namespace std;
template< class T1,class T2>
class A {
public:
void taunt(){cout< 一个; }
};
template< class T1>
class A< T1,T1> {
public:
void taunt(){cout< B; }
};
class B {};
class C {};
int main(int argc,char * const argv []){
A&一个;
return 0;
}
如何将我的两个参数模板转换为一个参数模板? p>
上面的代码将给出一个编译器错误'A a;'为'错误的模板参数数'。
模板专用化不能用于减少模板参数的数量,为此您应该为某些参数使用默认值。
因此,为了只允许使用一个参数,并且使用这个特性,你需要一个默认的第二个参数,它与第一个参数相同:
#include< iostream>
using namespace std;
template< class T1,class T2 = T1>
class A {
public:
void taunt(){cout< 一个; }
};
template< class T1>
class A< T1,T1> {
public:
void taunt(){cout< B; }
};
class B {};
class C {};
int main(int argc,char * const argv []){
A&一个;
a.taunt(); // PrintsB
return 0;
}
#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;
}
How can I convert my two parameter template to a one parameter template?
The above code will give a compiler error on 'A a;' for 'wrong number of template arguments'.
Template specialization can't be used to reduce the number of template arguments, to do that you should use defaults for some of the arguments.
So in order to allow usage of only one argument, and make that usage hit your specialization, you need a default for the second argument, which is the same as the first argument:
#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;
}
这篇关于c ++ partial specialization:我怎样专门化这个模板< class T1,class T2>到此模板< class T1> ;?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!