我想知道如何重载模板类。如果我有以下课程。我想为不同类型的 T 创建不同的功能。
template <class T>
class A {
T data;
public:
void print_data(void);
}
如果 T 是双精度类型,我需要一个类似以下伪代码的函数:
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;
}
有人有更好的解决方案吗?