是否可以使用可以在派生类中覆盖的模板方法声明某种类型的基类?以下示例:
#include <iostream>
#include <stdexcept>
#include <string>
class Base
{
public:
template<typename T>
std::string method() { return "Base"; }
};
class Derived : public Base
{
public:
template<typename T>
std::string method() override { return "Derived"; }
};
int main()
{
Base *b = new Derived();
std::cout << b->method<bool>() << std::endl;
return 0;
}
我期望Derived
作为输出,但它是Base
。我认为有必要制作一个模板包装器类,该类将实现类作为模板参数接收。但我想确定。
1)为了实现多态性,您的函数应标记为virtual
2)模板化函数是在POI上实例化的,并且不能是虚拟的(签名是什么?您保留多少个vtable条目?)。模板函数是一种编译时机制,虚函数是一种运行时机制。
一些可能的解决方案包括:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句