gpt4 book ai didi

c++ - 使库函数使用从库类派生的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:16 24 4
gpt4 key购买 nike

我有一个可以自己构建的 .dll。我有一个类 Lion,派生自库中的一个类 Cat,它覆盖了一个虚函数 Leap()。我想创建一个 Lion 类型的对象,将它传递给需要 Cat 类型的库函数,这样当它们调用 Cat->Leap (),它们使用重写的虚函数,Lion->Leap()

这有可能吗?

到目前为止,我尝试过的所有操作都以忽略覆盖函数而告终。我猜这是因为当库被编译时,它会计算出如何解析对 Leap() 的调用,此时我的派生类型不存在。或者,因为库引用了 Cat 类型的对象(实际上是 Lion 类型的对象),所以它调用 Cat::Leap() ,而不是 Lion::Leap()

我原以为函数是虚拟的这一事实意味着,即使它是从库中调用的,它也会通过在运行时查看对象的 vtable 来解决调用,这将是对于派生类型。

谢谢。

最佳答案

为了让它工作,库需要以某种方式编写:它应该通过引用或指针获取它的 Cat,而不是通过值(不幸的是,在 C++ 中传递参数的默认方式)。如果将 Lion 传递给需要 Cat 值的函数,则 Lion 会得到 slicedCat,就功能而言,实际上变成了 Cat

关于c++ - 使库函数使用从库类派生的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757128/

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