gpt4 book ai didi

C++ 模板基础 - 函数接受子类或父类(super class)

转载 作者:行者123 更新时间:2023-11-27 22:30:04 25 4
gpt4 key购买 nike

假设您有一个继承自父类(super class) 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 来检查。

关于C++ 模板基础 - 函数接受子类或父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com