c++ - 基于 C++ 特化的重载

标签 c++ inheritance overloading specialization

我正在尝试创建一个基于其参数特化的重载函数,例如:

class DrawableObject...;
class Mobile : public DrawableObject...;

class Game
{
    AddObject(DrawableObject * object)
    {
        // do something with object
    }
    AddObject(Mobile * object)
    {
        AddObject(dynamic_cast<DrawableObject *>(object));
        DoSomethingSpecificForSpecializedClass();
    }
};

...但是我的 MS 编译器给我这个错误:

error C2681: 'Mobile *' : invalid expression type for dynamic_cast

两个类都有虚函数。在这种情况下,这是向上转换的错误转换吗?我尝试过 C 风格的转换,一切都按预期运行。另外,这种设计是否有任何潜在的陷阱?

最佳答案

对于显式向上转型,使用static_cast

您的设计应该可以正常工作。请注意,如果您尝试传递一个可以隐式转换为 Mobile*DrawableObject* 的对象,那么对 AddObject() 的调用将不明确>,例如指向派生自 Mobile 的类的指针。

关于c++ - 基于 C++ 特化的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2023895/

相关文章:

c++ - 如何在派生类函数中修改基类变量的保护值?

c# - C# 中具有多个接口(interface)的属性可访问性

el - EL是否支持重载方法?

c++ - 传递 std::shared_ptr 作为对 lambda 捕获列表的引用 (C++)

c++ - 如何在 C/C++ 上创建和保存 .docx 文档?

c++ - 从 GMock 获得失败的期望

C++ 链接器错误

C#:从 boolean 值继承?

objective-c - 仅调用方法的一部分

function - 可以在 matlab 类中重载函数吗?