我尝试重写基类函数,但是因为我已经模板化了它的子类/派生类/子类,我无法重写该函数,具体取决于我实例化的类型带有的模板。我不能重写Base类的方法,因为我的派生类是模板化的
struct BaseType
{
virtual double getPropertyValue() = 0;
};
template <typename T>
struct NumberType : BaseType
{
T propertyValue;
T getPropertyValue() override { return propertyValue; } // I would like this to return whatever T is.
};
int main()
{
std::vector<BaseType*> vectr;
NumberType<double> doubleType; // This is fine, overrides the base function
NumberType<int> intType; // Has no overrider, won't compile
}
所以我想也许我也可以templatise基类,以便基类函数也返回T.但是如果我这样做,我将无法将它们放在容器中或指向它们,因为它们都是不同的类型>类型。
我也想过templatising Base并让它从一个更高的父母(它没有被模板化)继承,但我遇到了同样的问题。
有没有办法解决这个问题?
“*我不能重写基类的方法,因为我的派生类是模板化的*”这不是你无法重写的原因。 – juanchopanza
对不起,我意识到这听起来如此,你是对的。不仅仅是因为我对它进行了模板化,因为我得到了依赖于模板参数的返回类型。 – Zebrafish
为什么你需要*重写一个纯虚函数?对我来说,你在混合静态和动态多态。 – Bathsheba