我想编写一个函数(如果可能的话,甚至是一个运算符),它的作用类似于 Delphi 的“is”。
德尔福示例:
if Sender is TMenuItem then
TMenuItem(Sender)->Enabled = false;
所以,在 C++ 中 build 师 这将是这样的:
bool Is(*p1, *p2)
{
p = dynamic_cast<p1*>(p2); //here we typecast TObject to TMenuItem
if (!!p)
{
return true;
}
else return false;
}
如何让函数接受 p1、p2 的任何类型的对象?
最佳答案
问:如何让函数接受 p1、p2 的任何类型的对象?
答:使用模板,如下所示:
template<typename T, typename PtrType>
bool IsA(PtrType *ptr)
{
return dynamic_cast<T*>(ptr) != nullptr;
}
像这样使用模板化函数:
A* obj = new C();
if (IsA<C>(obj))
{
std::cout << "obj is of type C";
}
话虽如此,我建议您避免创建这样的函数,原因有两个:
关于c++builder - 如何在 C++ Builder 中编写相当于 Delphi "is"和 "as"的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52697411/