在从基础模板类派生的类中,我重写了createType()
方法。当我尝试访问派生类的createType(int)
时,编译器说它不存在。为什么?
template <class T>
class BaseClass
{
public:
virtual T createType(){ return T(); }
virtual T createType(int){ return T(); }
};
class Point
{
public:
float x, y;
};
class PointFactory : public BaseClass<Point>
{
public:
virtual Point createType() { return BaseClass::createType(); }
};
int main()
{
PointFactory pf;
auto p = pf.createType(5); // error here
return 0;
}
我得到的错误是
最佳答案
virtual Point PointFactory::createType()
隐藏基本重载。
您可以添加using BaseClass<Point>::createType;
来解决此问题:
class PointFactory : public BaseClass<Point>
{
public:
using BaseClass<Point>::createType; // unhide overloads
Point createType() override { return BaseClass::createType(); }
};
关于c++ - 从模板化基类覆盖方法时出现的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36315450/