-3
我想知道如何重載模板類。如果我有以下課程。我想創建不同類型的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;
}
有沒有人有更好的解決辦法?
你有沒有試過? (不要忘記函數返回類型!) –
對於Skippy,我想創建print_data()函數。我在這裏給的是錯誤的,他們只是展示我想要得到的東西。 – lengfei
對大衛:是的,我已經嘗試了上面的代碼與返回類型,我得到一個編譯錯誤。 – lengfei