【发布时间】:2014-08-16 13:25:24
【问题描述】:
考虑以下代码:
class Base
{
public:
virtual void* allocate(){ return nullptr; }
};
template <class T> class BaseTemplate : public Base
{
public:
void* allocate() override { return new T(); }
};
class IntSpecialization : public BaseTemplate<int>
{
};
Base GetSpecialization(const int&){ return IntSpecialization(); }
目标是能够使用模板实现特化,但仍允许用户使用基类接口工作,例如:
int a;
auto s = GetSpecialization(a);
auto p = s.allocate();
上面的代码不起作用; s.allocate() 总是返回 nullptr,原因很明显。
我绝对需要GetSpecialization 函数来返回Base 非模板类,那么我该怎么做呢?
Base类的虚方法不能是纯的,否则会变成抽象的,会在GetSpecialization处编译失败。
解决这种模式的最佳方法是什么?使用 C++11? 谢谢!
【问题讨论】:
标签: c++ templates c++11 overriding virtual