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

作者: noodleT (麵T)   2016-07-30 09:23:19
開發平台(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;
}
直接抓取該元件是否擁有某種屬性?
作者: james732 (好人超)   2016-07-30 09:28:00
Reflection (啊,跑錯棚)
作者: noodleT (麵T)   2016-07-30 10:04:00
如果大家文字屬性都叫.Text 那用template就解決了
作者: steve1012 (steve)   2016-07-30 10:18:00
Template想一想好像不對 你是每種class都有不同的地方要放str嗎像 A: caption, lable 放str B:title, content 放str還是每種class都只有一個datamember 要放string
作者: Ommm5566 (56天團)   2016-07-30 11:29:00
誠心建議 這樣不好 違反OO封裝的原則一般慣用 "取用"會用getVar()所以當getVar無回傳就是沒有 是比較好的檢查方式
作者: CoNsTaR ((const *))   2016-07-30 13:06:00
你現在要泛化不是抽象化 思考模式要改一下
作者: steve1012 (steve)   2016-07-30 14:21:00
蠻多OOP都有reflection的吧 Java 就有你說的這樣可以 可以用enable_if 配SFINAME 應該辦得到
作者: ctrlbreak   2016-07-31 01:24:00
所以很多人都根據自己的需求而發明了新的語言,如: Java
作者: annies5 (念渝)   2016-08-04 14:04:00
如果你只是要把字串丟進元件,用Hint就好了,大部分的可視元件都有(寫Delphi路過)

Links booklink

Contact Us: admin [ a t ] ucptt.com