假设您有一个继承自超类A的子类B。您想要一个可以接受A或B的函数。
template <typename T>
void someFunc(T* pObj, bool someOtherArg)
{
pObj->AnInheritMethod();
if (pObj->IsASub())
{
pObj->ANonInhertMethod();
}
}
当我对此进行编译(Visual Studio 6)时,我得到:
error C2065: 'pObj' : undeclared identifier
我要离开这里吗?
最佳答案
您不需要为此的功能模板;以下将很好用:
void someFunc(A* pObj)
{
pObj->AnInheritMethod();
if (B* pObjAsB = dynamic_cast<B*>(pObj))
{
pObjAsB->ANonInheritMethod();
}
}
或者,如果您更喜欢使用
IsASub()
成员函数而不是dynamic_cast
:void someFunc(A* pObj)
{
pObj->AnInheritMethod();
if (pObj->IsASub())
{
B* pObjAsB = static_cast<B*>(pObj);
pObjAsB->ANonInheritMethod();
}
}
除了缺少的返回类型,我在您的示例代码中没有发现任何明显错误;我没有安装Visual C ++ 6进行检查。