[问题] 判断类别是否有某种属性?

楼主: 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