※ 本文轉寄自 ptt.cc, 文章原始頁面
看板C_and_CPP
標題

[問題] c++ 繼承問題

最新2023-11-14 18:02:00
留言58則留言,14人參與討論
推噓14 ( 14044 )
想請問一個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://www.ptt.cc/bbs/C_and_CPP/M.1699577031.A.0CF.html

58 則留言

LPH66, 1F
可以說說想要這樣設計的理由嗎?

LPH66, 2F
你為什麼需要一個 Base::foo() 的「介面」在那裡?

kakar0to, 3F
Derived會有很多個,例如Derived_A,Derived_B等等

kakar0to, 4F
主要目的是希望Derived不要忘了去時做出foo的內容.

kakar0to, 5F
然後又想要可以沒有instance的時候使用foo()這個api

kakar0to, 6F
如果Derived不會忘了去做出foo的內容的話, 應該就

kakar0to, 7F
沒有這個問題, 想問一下大家的看法

LPH66, 8F
所以你的各 Derived 只是各種可以 foo 的標記?

LPH66, 9F
因為你想靜態使用, 這表示各 Derived 不會有成員

LPH66, 10F
那各 Derived 之間的差別就僅僅是 foo 實作不同而已

LPH66, 11F
回到「不會忘了去做出foo的內容」這句話, 為什麼你會想要

LPH66, 12F
Derived 「不會忘了實作一個靜態方法」? 有誰會用嗎?

kakar0to, 13F
Derived會有其他的內容。 不是只有一個foo functio

kakar0to, 14F
n

kakar0to, 15F
抱歉 我晚點把使用情境描述的更清楚一點。這樣太模

kakar0to, 16F
糊,應該很難給意見。

kakar0to, 17F
等等會重新編輯文章。

sanctitysky, 18F
不能使用嗎? 還是你需要的是static? 沒要動態轉型

sanctitysky, 19F
可以用concept

wulouise, 20F
USECASE列出來吧..

LPH66, 21F
其實 concept (或 pre-C++20 用 SFINAE) 應該八成是他要的

LPH66, 22F
這樣甚至不需要一個 "Base" 在那裡

LPH66, 23F
但我好像很少看到這類型的限定會用在 static 成員函數上

Lipraxde, 24F
Derived 有實作 foo 的話,為什麼要回頭用 Base::foo?

Lipraxde, 25F
哦~看懂了XD

s4300026, 26F
如果你可以呼叫static來解決問題,那就不用virtual啊。

s4300026, 27F
本來就該分兩個方法,有實體就用virtual,沒實體呼叫st

s4300026, 28F
atic。不然就是必定有實體,static的方法寫在base。

wulouise, 29F
每個derived都要不同實作還是大家都要一樣的?

wulouise, 30F
我覺得你要的是free function在不同namespace

CoNsTaR, 31F
寫 TMP 會有這種需要多個 class 實作同一個靜態函數的要

CoNsTaR, 32F
求,但如果原 Po 是在寫 TMP 大概也不會來問這問題

johnjohnlin, 33F
用derive* call foo不是你要的嗎

Lhmstu, 34F
在base class加上function pointer,然後derived class都

Lhmstu, 35F
需要實作 foo去修改這個function pointer指向的真正的實

Lhmstu, 36F
作函數

lycantrope, 37F
impl Foo for Derived (Rust來亂x

clh960524, 38F
假如原 PO 是問 derived class 腰實作 base class 的

clh960524, 39F
一個 function,且為了最好效能,該 function 一定要

clh960524, 40F
template,可以參考 CRTP

clh960524, 41F
要實際範例的話,可以參考這個 PR:https://github.co

clh960524, 42F
m/simdjson/simdjson/pull/2026

tinlans, 43F
你先好好描述你正在解決什麼問題,不是要你描述為什麼要

tinlans, 44F
用到這樣的語法或者語言機制上的需求,而是你的程式本身

tinlans, 45F
是寫來替你達成什麼目的。這目的是那種講給非程式設計師

tinlans, 46F
聽都聽得懂的那種,無關任何程式語言或語法。

tinlans, 47F
你的情況比較像是拿電鋸在轉開螺絲,然後問大家如何用

tinlans, 48F
電鋸把螺絲轉開,但大家都疑惑平常沒人拿電鋸去轉開螺絲

tinlans, 49F
,因此必須從你一開始到底想幹嘛開始理解才行。

tinlans, 50F
有可能講清楚以後,大家才知道你根本連轉開這螺絲都不必

tinlans, 51F
,這樣建議你別用電鋸或改用螺絲起子都只是在浪費時間。

tinlans, 52F
所以你先用地理老師都聽得懂的方式說明一下你正在幹嘛。

wulouise, 53F
樓上完美描述問問題應該先從context &use case開始

sarafciel, 54F
電鋸轉螺絲這個比喻也太傳神XDDD

pnpncat, 55F
你這個範例...要記得加上分號XD

johnjohnlin, 56F
CRTP真的很好用

Lipraxde, 57F
CRTP 好用是好用,但是不要硬用哦XD

Lipraxde, 58F
看過全寫 template 的地方在用 CRTP Orz

kakar0to 作者的近期文章

[問題] python list問題
我目前的程式有兩個thread A與B. Thread A 會用append的方式寫入data 到list c裡面, thread B 會用for loop的方式從c的起頭開始讀取data. 想請教以下一個狀況.--------------
[請益] 請問日本etf
請問日本有類似0050這種市值型前幾大的etf嗎? 主要是想投資日本前幾大商社的公司.謝謝
[問卦] 這次不讓民進黨難看
難看的就是我們 大家同意嗎? 有沒有滿20字了? 好像還沒...
[問卦] 為什麼不能在居住地投票
想問這個技術上不可行的地方在哪裡? 還是塔綠班怕年輕人投票率太高? 可以解惑一下嗎
Re: [新聞] 年輕人投票率85%就當選 柯文哲喊話:
: 柯文哲這次的政策毫無勝選機會 就算柯文哲勝選機率是0, 我還是會投柯文哲. 想騙我棄柯保侯是不可能的 還好我精的跟猴一樣~~~(此猴非彼侯)
Re: [新聞] 衛福部多次要求高端公開合約 王必勝:
: 陳建仁說,全世界學術界和臨床實驗結果,都顯示高端是好的疫苗,今年一月才刊登,高端 : 在預防重症、死亡,等於BNT和莫德納,比AZ還要好。對於高端案件,從頭到尾就是一個打 : 擊國內生醫產業發展的情形。 : 想請問一下塔綠班, 效果等同
更多 kakar0to 作者的文章...