c++ builder XE4, 10.2 Tokyo > InheritsFrom()の使用例 > if (pControl->InheritsFrom(__classid(TEdit)) ) {
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
コンポーネントのタイプを知る方法はhelpによると
メモ: C++ では,ClassType メソッドのかわりに動的キャストまたは InheritsFrom メソッドを使用してください。
http://qiita.com/7of9/items/e9c6b360039be4605e6b
InheritsFrom()の使用例は以下のようなものだ
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Clear();
String name;
String msg;
TControl *pControl;
for(int idx=0; idx < this->ControlCount; idx++) {
msg = L"";
name = this->Controls[idx]->Name;
pControl = this->Controls[idx];
if (pControl->InheritsFrom(__classid(TEdit)) ) {
msg = name + L" is TEdit";
}
if (msg.Length() > 0) {
Memo1->Lines->Add(msg);
}
}
}
動的キャストとInheritsFrom メソッドの対比については
You should use dynamic_cast instead of InheritsFrom():
if( dynamic_cast<TSomeTargetType>(SomeSourcePointer) != NULL )
// SomeSourcePointer is a TSomeTargetType instance...
else
// SomeSourcePointer is not a TSomeTargetType instance...
If you must use InheritsFrom(), then you need to use the __classid()
keyword:
if( SomeSourcePointer->InheritsFrom(__classid(TSomeTargetType)) )
// SomeSourcePointer does derive from TSomeTargetType...
else
// SomeSourcePointer does not derive from TSomeTargetType...
どちらも同じくらいのコード長になる。
dynamic_castの方がより一般的なコードの気がする。(__classidというキーワードを知らなくてもいい、という点)
Author And Source
この問題について(c++ builder XE4, 10.2 Tokyo > InheritsFrom()の使用例 > if (pControl->InheritsFrom(__classid(TEdit)) ) {), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/018cadc28a16a867a1d2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .