[問題] 判斷類別是否有某種屬性?

看板C_and_CPP (C/C++)作者 (麵T)時間9年前 (2016/07/30 09:23), 9年前編輯推噓7(708)
留言15則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) BCB6 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 在 BCB 中 TButton, TMemo 都繼承自 TCompoent 但 TButton 的顯示文字是用 Button.Caption TMemo 則是 Memo.Text 程式碼如下: http://ideone.com/IZOSIi 在 bool Show(TComponent* cmp,const AnsiString &str) 判斷元件類型並且顯示文, 但覺得不好的點是在於我必須一個個判斷 該元件是 Button 還是 Memo 甚至如果有其他不同的元件,如 TLable。 這種方式就實在很麻煩。 請問有沒有類似的寫法: bool Show(TComponent* cmp,const AnsiString &str) { 是否有 Caption ? Caption = str; 是否有 Text ? Text = str; } 直接抓取該元件是否擁有某種屬性? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.10.100.154 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1469841803.A.F5F.html

07/30 09:28, , 1F
Reflection (啊,跑錯棚)
07/30 09:28, 1F

07/30 10:04, , 2F
如果大家文字屬性都叫.Text 那用template就解決了
07/30 10:04, 2F

07/30 10:18, , 3F
Template
07/30 10:18, 3F

07/30 10:28, , 4F
想一想好像不對 你是每種class都有不同的地方要放str嗎
07/30 10:28, 4F

07/30 10:28, , 5F
像 A: caption, lable 放str B:title, content 放str
07/30 10:28, 5F

07/30 10:28, , 6F
還是每種class都只有一個datamember 要放string
07/30 10:28, 6F
不太懂你說的意思。 現在有一些元件: TA, TB,TC 的文字都放在 .Text 使用上例如: TA. Text = "Hello" 另外有些元件 CA, CB, CC 的文字放在Caption CA. Caption = "Hi" 如果今天 TA, TB, TC, CA,CB,CC 的文字都放在 .Word TA. Word = "test" CA. Word = "test" 這樣就可以用 Template 了吧? ※ 編輯: noodleT (39.10.100.154), 07/30/2016 10:44:44

07/30 11:29, , 7F
誠心建議 這樣不好 違反OO封裝的原則
07/30 11:29, 7F

07/30 11:30, , 8F
一般慣用 "取用"會用getVar()
07/30 11:30, 8F

07/30 11:31, , 9F
所以當getVar無回傳就是沒有 是比較好的檢查方式
07/30 11:31, 9F

07/30 13:06, , 10F
你現在要泛化不是抽象化 思考模式要改一下
07/30 13:06, 10F

07/30 14:21, , 11F
蠻多OOP都有reflection的吧 Java 就有
07/30 14:21, 11F

07/30 14:29, , 12F
你說的這樣可以 可以用enable_if 配SFINAME 應該辦得到
07/30 14:29, 12F

07/31 01:24, , 13F
所以很多人都根據自己的需求而發明了新的語言,如: Java
07/31 01:24, 13F

08/04 14:04, , 14F
如果你只是要把字串丟進元件,用Hint就好了,大部分的可視
08/04 14:04, 14F

08/04 14:04, , 15F
元件都有(寫Delphi路過)
08/04 14:04, 15F
文章代碼(AID): #1Nd06BzV (C_and_CPP)
文章代碼(AID): #1Nd06BzV (C_and_CPP)