模板类时模板不能是虚拟错误

时间:2016-05-13 08:33:24

标签: c++ oop templates

我有这样一个抽象的课程:

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 :(

有没有办法解决它?

1 个答案:

答案 0 :(得分:2)

virtual只能在类定义中使用,所以只需删除它以获取外部类成员函数定义。

template<class V, class K>
size_t MyLRUCache<V, K>::getSize() const { ... }

请注意,您应该添加const,因为它是一个const成员函数。