PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] c++ 繼承問題
作者:
kakar0to
(Poker Face)
2023-11-10 08:43:48
想請問一個class 繼承問題
class Base
{
public:
virtual void foo() = 0;
Base{};
~Base{};
}
clase Derived : public Base
{
內容略
}
請問有辦法可以讓Derived class去實作foo()的內容,
同時又能Derived::foo()這樣使用嗎?
c++不能virtual+static同時使用, 有別的方式可以達到同樣的
目的嗎?
作者:
LPH66
(-6.2598534e+18f)
2023-11-10 08:45:00
可以說說想要這樣設計的理由嗎?你為什麼需要一個 Base::foo() 的「介面」在那裡?
作者:
kakar0to
(Poker Face)
2023-11-10 08:54:00
Derived會有很多個,例如Derived_A,Derived_B等等主要目的是希望Derived不要忘了去時做出foo的內容.然後又想要可以沒有instance的時候使用foo()這個api如果Derived不會忘了去做出foo的內容的話, 應該就沒有這個問題, 想問一下大家的看法
作者:
LPH66
(-6.2598534e+18f)
2023-11-10 09:01:00
所以你的各 Derived 只是各種可以 foo 的標記?因為你想靜態使用, 這表示各 Derived 不會有成員那各 Derived 之間的差別就僅僅是 foo 實作不同而已回到「不會忘了去做出foo的內容」這句話, 為什麼你會想要Derived 「不會忘了實作一個靜態方法」? 有誰會用嗎?
作者:
kakar0to
(Poker Face)
2023-11-10 09:08:00
Derived會有其他的內容。 不是只有一個foo function抱歉 我晚點把使用情境描述的更清楚一點。這樣太模糊,應該很難給意見。等等會重新編輯文章。
作者:
sanctitysky
(常自在)
2023-11-10 09:18:00
不能使用嗎? 還是你需要的是static? 沒要動態轉型可以用concept
作者:
wulouise
(在線上!=在電腦前)
2023-11-10 10:00:00
USECASE列出來吧..
作者:
LPH66
(-6.2598534e+18f)
2023-11-10 10:54:00
其實 concept (或 pre-C++20 用 SFINAE) 應該八成是他要的這樣甚至不需要一個 "Base" 在那裡但我好像很少看到這類型的限定會用在 static 成員函數上
作者:
Lipraxde
(Lipraxde)
2023-11-10 11:10:00
Derived 有實作 foo 的話,為什麼要回頭用 Base::foo?哦~看懂了XD
作者:
s4300026
(s4300026)
2023-11-10 11:39:00
如果你可以呼叫static來解決問題,那就不用virtual啊。本來就該分兩個方法,有實體就用virtual,沒實體呼叫static。不然就是必定有實體,static的方法寫在base。
作者:
wulouise
(在線上!=在電腦前)
2023-11-10 11:42:00
每個derived都要不同實作還是大家都要一樣的?我覺得你要的是free function在不同namespace
作者:
CoNsTaR
((const *))
2023-11-10 12:29:00
寫 TMP 會有這種需要多個 class 實作同一個靜態函數的要求,但如果原 Po 是在寫 TMP 大概也不會來問這問題
作者:
johnjohnlin
(嗯?)
2023-11-10 12:47:00
用derive* call foo不是你要的嗎
作者:
Lhmstu
(lhmstu)
2023-11-10 13:24:00
在base class加上function pointer,然後derived class都需要實作 foo去修改這個function pointer指向的真正的實作函數
作者:
lycantrope
(阿寬)
2023-11-10 16:15:00
impl Foo for Derived (Rust來亂x
作者:
clh960524
(CLH)
2023-11-10 17:17:00
假如原 PO 是問 derived class 腰實作 base class 的一個 function,且為了最好效能,該 function 一定要template,可以參考 CRTP要實際範例的話,可以參考這個 PR:
https://github.co
m/simdjson/simdjson/pull/2026
作者:
tinlans
( )
2023-11-12 04:02:00
你先好好描述你正在解決什麼問題,不是要你描述為什麼要用到這樣的語法或者語言機制上的需求,而是你的程式本身是寫來替你達成什麼目的。這目的是那種講給非程式設計師聽都聽得懂的那種,無關任何程式語言或語法。你的情況比較像是拿電鋸在轉開螺絲,然後問大家如何用電鋸把螺絲轉開,但大家都疑惑平常沒人拿電鋸去轉開螺絲,因此必須從你一開始到底想幹嘛開始理解才行。有可能講清楚以後,大家才知道你根本連轉開這螺絲都不必,這樣建議你別用電鋸或改用螺絲起子都只是在浪費時間。所以你先用地理老師都聽得懂的方式說明一下你正在幹嘛。
作者:
wulouise
(在線上!=在電腦前)
2023-11-12 10:17:00
樓上完美描述問問題應該先從context &use case開始
作者:
sarafciel
(Cattuz)
2023-11-12 17:18:00
電鋸轉螺絲這個比喻也太傳神XDDD
作者:
pnpncat
(meow)
2023-11-12 23:36:00
你這個範例...要記得加上分號XD
作者:
johnjohnlin
(嗯?)
2023-11-14 15:30:00
CRTP真的很好用
作者:
Lipraxde
(Lipraxde)
2023-11-14 18:02:00
CRTP 好用是好用,但是不要硬用哦XD看過全寫 template 的地方在用 CRTP Orz
作者:
nicofox
(reqw)
2022-06-22 22:22:00
原po問how 大家問why 有趣了
繼續閱讀
[問題] MCU處理LCD顯示繁體中文字
IntelNNP
Re: [問題] 在流程中插入檢查或不檢查 程式怎麼寫
wulouise
[贈書] 兩本很舊但狀況很好的原文書(送出)
in09
[問題] 在流程中插入檢查或不檢查 程式怎麼寫
saladim
[問題] getline讀檔案多一行
bamboopole
[問題] bool變數出while迴圈之後消失了?
ericliu8168
[閒聊] case的內容會用花括號包起來嗎?
wei115
[問題]char 指標問題
amamoimi
[問題] bmp 縮放後顏色改變問題
benny5566
[問題] double thread double buffer
os653
Links
booklink
Contact Us: admin [ a t ] ucptt.com