Re: [問題] template型態不同的辨識方法

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間14年前 (2012/06/11 15:12), 編輯推噓6(606)
留言12則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

06/11 15:22, , 1F
謝謝你!!
06/11 15:22, 1F

06/11 15:34, , 2F
可是answer和sign之後都會被更改...
06/11 15:34, 2F

06/11 15:36, , 3F
多加個SetAnswer(double)/GetAnswer之類的就好
06/11 15:36, 3F

06/11 15:40, , 4F
加在 NumberTrait<Fraction>, NumberTrait<double>裡嗎?
06/11 15:40, 4F

06/11 16:32, , 5F
「更改」的意思是?
06/11 16:32, 5F

06/11 16:58, , 6F
ans =ans+....
06/11 16:58, 6F

06/11 17:20, , 7F
呃,這樣會有什麼問題嗎?
06/11 17:20, 7F

06/11 17:24, , 8F
error: lvalue required as left operand of assignmen
06/11 17:24, 8F

06/11 19:01, , 9F
T ans = NumberTrait<T>::answer();
06/11 19:01, 9F

06/11 19:01, , 10F
ans = ans + ...;
06/11 19:01, 10F

06/11 19:02, , 11F
這樣不行嗎?
06/11 19:02, 11F

06/11 19:30, , 12F
可以了!!!原來我用錯了....感謝你>_<
06/11 19:30, 12F
文章代碼(AID): #1FrPfp02 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FrPfp02 (C_and_CPP)