我有这样一个抽象的课程:
template<class V, class K>
class MyAbstractCache {
protected:
...
public:
...
virtual size_t getSize() const = 0;
...
};
然后派生一个:
template<class V, class K>
class MyLRUCache : public MyAbstractCache<V, K> {
...
public:
...
virtual size_t getSize() const {
return _key_to_value.size();
}
问题是当我将getSize()
的实现放在类声明之外时,我得到编译器错误:模板可能不是'虚拟'。
template<class V, class K>
virtual size_t MyLRUCache<V, K>::getSize() { ... } // compile error :(
有没有办法解决它?
答案 0 :(得分:2)
virtual
只能在类定义中使用,所以只需删除它以获取外部类成员函数定义。
template<class V, class K>
size_t MyLRUCache<V, K>::getSize() const { ... }
请注意,您应该添加const
,因为它是一个const成员函数。