【发布时间】:2018-06-02 19:27:12
【问题描述】:
我有一个基类(我想用它来模拟接口)
template<typename TType>
class Base
{
public:
virtual SomeTemplatedClass<TType> GetTheObject() = 0;
}
显然是一个派生类
template<typename TType>
class Derived : public Base<TType>
{
public:
virtual SomeTemplatedClass<TType> GetTheObject() = 0;
}
但对于某些特定类型,我打算专门化“GetTheObject”
template<>
SomeTemplatedClass<int> Derived<int>::GetTheObject()
{
return 5;
}
Visual Studio 2015 抱怨它无法实例化抽象类,当我尝试使用时
Derived<int>
甚至为模板版本提供抛出行为
class Derived : public Base<TType>
{
public:
virtual SomeTemplatedClass<TType> GetTheObject() override
{
throw <something>;
}
}
让一切编译。 所以我的问题是:为什么我需要提供一个通用的行为,当我有一个特定的并且唯一需要的时候?
【问题讨论】:
-
从
Derived中GetTheObject()的声明中删除=0说明符。这迫使该功能是纯虚拟的。定义函数不会改变这一点。
标签: c++11 templates visual-c++