CBuilder中的“IS”运算符Delphi

ale*_*crt 2 delphi c++builder

在Delphi中,我写了以下代码来识别一个Graphic是一个TBitmap:

if aImage.Picture.Graphic is TBitmap then 
  ...
Run Code Online (Sandbox Code Playgroud)

在 C++ Builder 中,我编写了以下代码:

if (dynamic_cast<Image1->Picture->Graphic>(TBitmap) != 0) 
    ....
Run Code Online (Sandbox Code Playgroud)

但它不起作用。C++ Builder 如何在 Delphi 中做同样的检查?

Dav*_*nan 5

你的代码应该是

if (dynamic_cast<TBitmap*>(Image1->Picture->Graphic) != 0) 
    ....
Run Code Online (Sandbox Code Playgroud)

或者

if (dynamic_cast<TBitmap*>(Image1->Picture->Graphic) != nullptr) 
    ....
Run Code Online (Sandbox Code Playgroud)

或者

if (dynamic_cast<TBitmap*>(Image1->Picture->Graphic)) 
    ....
Run Code Online (Sandbox Code Playgroud)

或者

TBitmap* bitmap = dynamic_cast<TBitmap*>(Image1->Picture->Graphic);
if (bitmap)
{
    .... 
    // do stuff with bitmap
}
Run Code Online (Sandbox Code Playgroud)

这些都是等价的,你可以选择你喜欢的。

该dynamic_cast运营商在这里记载:http://docwiki.embarcadero.com/RADStudio/en/Dynamic_cast_(C%2B%2B_Type_Cast_Operator)