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

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编译器给我这个错误:


  错误C2681:“移动*”:dynamic_cast的无效表达式类型


这两个类都具有虚函数。在这种情况下,这是否是错误的向上投射?我尝试了C样式的强制转换,并且所有功能均按预期进行。此外,这种设计是否有潜在的陷阱?

最佳答案

要进行显式上播,请使用static_cast

您的设计应该可以正常工作。请注意,如果尝试传递可以隐式转换为AddObject()Mobile*的对象,例如指向从DrawableObject*派生的类的指针,则对Mobile的调用将是模棱两可的。

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

10-11 01:15