C_and_CPP 板


LINE

想請問一個class 繼承問題 class Base { public: virtual void foo() = 0; Base{}; ~Base{}; } clase Derived : public Base { 內容略 } 請問有辦法可以讓Derived class去實作foo()的內容, 同時又能Derived::foo()這樣使用嗎? c++不能virtual+static同時使用, 有別的方式可以達到同樣的 目的嗎? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.72.64.165 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1699577031.A.0CF.html
1F:推 LPH66: 可以說說想要這樣設計的理由嗎? 11/10 08:45
2F:→ LPH66: 你為什麼需要一個 Base::foo() 的「介面」在那裡? 11/10 08:46
3F:→ kakar0to: Derived會有很多個,例如Derived_A,Derived_B等等 11/10 08:54
4F:→ kakar0to: 主要目的是希望Derived不要忘了去時做出foo的內容. 11/10 08:54
5F:→ kakar0to: 然後又想要可以沒有instance的時候使用foo()這個api 11/10 08:54
6F:→ kakar0to: 如果Derived不會忘了去做出foo的內容的話, 應該就 11/10 08:56
7F:→ kakar0to: 沒有這個問題, 想問一下大家的看法 11/10 08:57
8F:推 LPH66: 所以你的各 Derived 只是各種可以 foo 的標記? 11/10 09:01
9F:→ LPH66: 因為你想靜態使用, 這表示各 Derived 不會有成員 11/10 09:01
10F:→ LPH66: 那各 Derived 之間的差別就僅僅是 foo 實作不同而已 11/10 09:01
11F:→ LPH66: 回到「不會忘了去做出foo的內容」這句話, 為什麼你會想要 11/10 09:06
12F:→ LPH66: Derived 「不會忘了實作一個靜態方法」? 有誰會用嗎? 11/10 09:06
13F:→ kakar0to: Derived會有其他的內容。 不是只有一個foo functio 11/10 09:08
14F:→ kakar0to: n 11/10 09:08
15F:→ kakar0to: 抱歉 我晚點把使用情境描述的更清楚一點。這樣太模 11/10 09:10
16F:→ kakar0to: 糊,應該很難給意見。 11/10 09:10
17F:→ kakar0to: 等等會重新編輯文章。 11/10 09:11
18F:推 sanctitysky: 不能使用嗎? 還是你需要的是static? 沒要動態轉型 11/10 09:18
19F:→ sanctitysky: 可以用concept 11/10 09:18
20F:推 wulouise: USECASE列出來吧.. 11/10 10:00
21F:→ LPH66: 其實 concept (或 pre-C++20 用 SFINAE) 應該八成是他要的 11/10 10:54
22F:→ LPH66: 這樣甚至不需要一個 "Base" 在那裡 11/10 10:55
23F:→ LPH66: 但我好像很少看到這類型的限定會用在 static 成員函數上 11/10 10:55
24F:→ Lipraxde: Derived 有實作 foo 的話,為什麼要回頭用 Base::foo? 11/10 11:10
25F:推 Lipraxde: 哦~看懂了XD 11/10 11:13
26F:→ s4300026: 如果你可以呼叫static來解決問題,那就不用virtual啊。 11/10 11:39
27F:→ s4300026: 本來就該分兩個方法,有實體就用virtual,沒實體呼叫st 11/10 11:39
28F:→ s4300026: atic。不然就是必定有實體,static的方法寫在base。 11/10 11:39
29F:推 wulouise: 每個derived都要不同實作還是大家都要一樣的? 11/10 11:42
30F:→ wulouise: 我覺得你要的是free function在不同namespace 11/10 11:43
31F:推 CoNsTaR: 寫 TMP 會有這種需要多個 class 實作同一個靜態函數的要 11/10 12:29
32F:→ CoNsTaR: 求,但如果原 Po 是在寫 TMP 大概也不會來問這問題 11/10 12:29
33F:推 johnjohnlin: 用derive* call foo不是你要的嗎 11/10 12:47
34F:推 Lhmstu: 在base class加上function pointer,然後derived class都 11/10 13:24
35F:→ Lhmstu: 需要實作 foo去修改這個function pointer指向的真正的實 11/10 13:24
36F:→ Lhmstu: 作函數 11/10 13:24
37F:→ lycantrope: impl Foo for Derived (Rust來亂x 11/10 16:15
38F:推 clh960524: 假如原 PO 是問 derived class 腰實作 base class 的 11/10 17:17
39F:→ clh960524: 一個 function,且為了最好效能,該 function 一定要 11/10 17:17
40F:→ clh960524: template,可以參考 CRTP 11/10 17:17
41F:推 clh960524: 要實際範例的話,可以參考這個 PR:https://github.co 11/10 17:20
42F:→ clh960524: m/simdjson/simdjson/pull/2026 11/10 17:20
43F:→ tinlans: 你先好好描述你正在解決什麼問題,不是要你描述為什麼要 11/12 04:02
44F:→ tinlans: 用到這樣的語法或者語言機制上的需求,而是你的程式本身 11/12 04:03
45F:→ tinlans: 是寫來替你達成什麼目的。這目的是那種講給非程式設計師 11/12 04:05
46F:→ tinlans: 聽都聽得懂的那種,無關任何程式語言或語法。 11/12 04:05
47F:→ tinlans: 你的情況比較像是拿電鋸在轉開螺絲,然後問大家如何用 11/12 04:19
48F:→ tinlans: 電鋸把螺絲轉開,但大家都疑惑平常沒人拿電鋸去轉開螺絲 11/12 04:19
49F:→ tinlans: ,因此必須從你一開始到底想幹嘛開始理解才行。 11/12 04:20
50F:→ tinlans: 有可能講清楚以後,大家才知道你根本連轉開這螺絲都不必 11/12 04:21
51F:→ tinlans: ,這樣建議你別用電鋸或改用螺絲起子都只是在浪費時間。 11/12 04:22
52F:→ tinlans: 所以你先用地理老師都聽得懂的方式說明一下你正在幹嘛。 11/12 04:28
53F:推 wulouise: 樓上完美描述問問題應該先從context &use case開始 11/12 10:17
54F:推 sarafciel: 電鋸轉螺絲這個比喻也太傳神XDDD 11/12 17:18
55F:→ pnpncat: 你這個範例...要記得加上分號XD 11/12 23:36
56F:推 johnjohnlin: CRTP真的很好用 11/14 15:30
57F:→ Lipraxde: CRTP 好用是好用,但是不要硬用哦XD 11/14 18:02
58F:→ Lipraxde: 看過全寫 template 的地方在用 CRTP Orz 11/14 18:02
59F:推 nicofox: 原po問how 大家問why 有趣了 06/22 22:22







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP