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同时使用, 有别的方式可以达到同样的 目的吗? --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.72.64.165 (台湾)
※ 文章网址: https://webptt.com/cn.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灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP