作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] template型態不同的辨識方法
時間Mon Jun 11 15:12:48 2012
※ 引述《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