看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《towaomami (永恆的真實)》之銘言: : EX: : 在double時 : T answer=0; : T sign=1; : : 在class Fraction時 : T answer(0,0,1); : T sign(1,0,1); : 這兩種不同的表達方式,我不知道該如何把它們寫在同個副程式中... : 還是, : 有辦法判斷傳進副程式的type是double or class Fraction嗎??? : 謝謝。 這通常就用 trait 解決 template <typename T> struct NumberTrait {}; template <> struct NumberTrait<double> { static double answer() { return 0.0; } static double sign() { return 1.0; } }; template <> struct NumberTrait<Fraction> { static Fraction answer() { return Fraction(0, 0, 1); } static Fraction sign() { return Fraction(1, 0, 1); } }; 然後你就寫 NumberTrait<T>::answer() -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.3.139
towaomami:謝謝你!! 06/11 15:22
towaomami:可是answer和sign之後都會被更改... 06/11 15:34
shadow0326:多加個SetAnswer(double)/GetAnswer之類的就好 06/11 15:36
towaomami:加在 NumberTrait<Fraction>, NumberTrait<double>裡嗎? 06/11 15:40
littleshan:「更改」的意思是? 06/11 16:32
towaomami:ans =ans+.... 06/11 16:58
littleshan:呃,這樣會有什麼問題嗎? 06/11 17:20
towaomami: error: lvalue required as left operand of assignmen 06/11 17:24
littleshan:T ans = NumberTrait<T>::answer(); 06/11 19:01
littleshan:ans = ans + ...; 06/11 19:01
littleshan:這樣不行嗎? 06/11 19:02
towaomami:可以了!!!原來我用錯了....感謝你>_< 06/11 19:30