在从基础模板类派生的类中,我重写了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/

10-10 09:15