Y
yang2000
Unregistered / Unconfirmed
GUEST, unregistred user!
bcb5的help里关于typeid的说明有一段话:When the typeid operand is a Delphi class object/reference, typeid returns the static rather than runtime type. Click here to see an example.并提供了一个例子:
static const char *TypeIdName(TObject *c) {
return typeid(*c).name();
}
// The button抯 caption is set to TObject, not TButton.
void __fastcall TForm1::Button1Click(TObject *Sender) {
Button1->Caption = TypeIdName(Button1);
}
但在bcb5里运行的结果与说明截然相反,button的caption的确变成的TButton.
而我觉得typeid从VMT里取vcl对象的运行时信息是很正常的(也很容易),跟踪上面的例子,从
cpu窗口里的汇编代码看也的确如此,我迷惑的是为什么bcb的help专门为此提供了一个例子
而例子的结果却不对(这显然不像是笔误,这里似乎对语言的RTTI实现机制的理解有了问题),
是help错了或是我搞错了.
static const char *TypeIdName(TObject *c) {
return typeid(*c).name();
}
// The button抯 caption is set to TObject, not TButton.
void __fastcall TForm1::Button1Click(TObject *Sender) {
Button1->Caption = TypeIdName(Button1);
}
但在bcb5里运行的结果与说明截然相反,button的caption的确变成的TButton.
而我觉得typeid从VMT里取vcl对象的运行时信息是很正常的(也很容易),跟踪上面的例子,从
cpu窗口里的汇编代码看也的确如此,我迷惑的是为什么bcb的help专门为此提供了一个例子
而例子的结果却不对(这显然不像是笔误,这里似乎对语言的RTTI实现机制的理解有了问题),
是help错了或是我搞错了.