Re: [問題] class判斷問題

看板C_and_CPP作者 (咕啾咕啾魔法陣)時間8年前 (2017/05/12 11:54), 8年前編輯推噓2(207)
留言9則, 4人參與, 最新討論串2/2 (看更多)
class implB{ public: void f(); }; template<T> class A:{ public: /* 為方便理解,函數定義在class內 這樣有T的定義相依性 */ A():p(new T){...} void f(){p->f();} private: T * p; }; class B:public A<implB>{ ... }; 類似這樣做,少的部分請自己補上 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.56.185 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1494561253.A.EFD.html ※ 編輯: loveflames (60.248.56.185), 05/12/2017 12:10:05

05/12 15:06, , 1F
謝謝您 我會再試試
05/12 15:06, 1F

05/12 22:53, , 2F
請問~這樣 implB的fun() 怎麼存取 A 的成員 傳this嗎
05/12 22:53, 2F

05/12 23:29, , 3F
其實可以不用分寫一個 implB 出來
05/12 23:29, 3F

05/12 23:29, , 4F
直接繼承 A<B> 即可, 這個寫法叫做 CRTP
05/12 23:29, 4F

05/12 23:29, , 5F
之所以可以不用的原因是寫 template<...> class A 的時候
05/12 23:29, 5F

05/12 23:30, , 6F
A 還沒有真正實體化出來, 要到 B 繼承 A<B> 時才會實體化
05/12 23:30, 6F

05/12 23:30, , 7F
而這時 B 已經知道是什麼東西了所以可以用
05/12 23:30, 7F

05/12 23:39, , 8F
05/12 23:39, 8F

05/13 00:24, , 9F
原始要求是子類不要有函數
05/13 00:24, 9F
文章代碼(AID): #1P5J7bxz (C_and_CPP)
文章代碼(AID): #1P5J7bxz (C_and_CPP)