我想编写一个函数(如果可能的话,甚至是一个运算符),该函数的作用类似于Delphi的“ is”。 Delphi示例:
if Sender is TMenuItem then
TMenuItem(Sender)->Enabled = false;
因此,在C ++ Builder 中,它类似于:
bool Is(*p1, *p2)
{
p = dynamic_cast<p1*>(p2); //here we typecast TObject to TMenuItem
if (!!p)
{
return true;
}
else return false;
}
如何使函数接受p1,p2的任何类型的对象?
答案 0 :(得分:3)
问:如何使函数接受p1,p2的任何类型的对象?
A:使用模板,如下所示:
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";
}
话虽如此,我建议您避免创建此函数的原因有两个: