我正在尝试创建一个基于其参数特化的重载函数,例如:
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/