0
我想寫一個接受許多不同類型的函數,比如double和complex。我也想打印他們的成員,比如打印double值,當這個類型是double時,打印這個類型是複雜的實部和虛部。一個打印不同類型成員的函數
如果我使用模板,會出現錯誤,因爲double不能有實部和虛部。
說
template<class T>
void univ_print(T t)
{
if(typeid(T)==typeid(double))
printf("%f\n",t);
else if(typeid(T)==typeid(complex))
printf("%f\t%f\n",t.real, t.imag);
}
這是行不通的。那麼我怎樣才能獲得我想要的效果。
謝謝!
你可以只重載'univ_print()'爲不同類型的,而不是使用的模板。 (例如'univ_float(double)'和'univ_float(complex)')。只有當你有一堆可以被視爲相同的類型時,模板纔會起作用,或者大部分是相同的, /或特定的過載。你究竟想在這裏實現什麼? – cdhowie
@cdhowie:好主意,謝謝!這就是我想要的。 –
爲什麼在你使用'printf'的時候,'basic_ostream :: operator <<'已經定義了你想要顯示的大多數類型。任何額外的需求都可以通過專門的'univ_print'來處理。 – paddy