我想知道如何重载模板类。如果我有以下课程。我想为不同类型的T创建不同的功能。
template <class T>
class A {
T data;
public:
void print_data(void);
}
如果T是double类型,我需要一个像伪代码一样的函数:
template <class T>
void A<double>::print_data(){
printf("%g",date);
}
如果T是复杂类型,我需要它像这样工作:
template <class T>
void A< complex<double> >::print_data(){
printf("%g+%gi",data.real(),date.imag());
}
我应该如何实现这一目标。谢谢!
我找到了一个解决方案,但我认为它不是很好。基本思想是使用输入参数进行重载。
template <class T>
class A {
public:
T data;
void print_data(double);
void print_data(complex<T>);
}
template <class T>
void A<T>::print_data(double){
printf("%g",date);
}
template <class T>
void A<T>::print_data(complex<T>){
printf("%g+%gi",data.real(),date.imag());
}
int main(void)
{
//just demonstrate the idea, may not work
A<double> ddata;
A<complex> cdata;
ddata.data = 2.0;
cdata.data = complex(1,2);
ddata->print_data(ddata);
cdata->print_data(cdata);
return 0;
}
任何人都有更好的解决方案吗?
答案 0 :(得分:1)
只需将具体类型的模板功能专门化:
template <>
void A<double>::print_data()
{
std::cout << data << std::endl;
}
template<>
void A<complex<double> >::print_data(){
std::cout << data.real() << "+" << data.imag() << std::endl;
}