编译错误 - 定义模板化抽象的具体实现 class

Compilation error - defining a concrete implementation of templated abstract class

我的头文件中有一个摘要class:

template <class T>
    class IRepository {
    public:
        virtual bool SaveData(Result<T> &r) = 0;
        //virtual Result<T> & GetData()const = 0;
        virtual ~IRepository() {}
    };

我是在头文件本身继承的:

template <class T>
    class Repo1 :public IRepository<T>
    {
    public:
        bool SaveData(Result<T> &r)override;
        //Result<T> & GetData() const override;
    private:
        std::mutex mx;
        std::queue<T> m_q;
    };

我试图在 cpp 文件中定义 SaveData:

template <class T>
    bool Repo1::SaveData(Result<T> &r)
    {
        std::lock_guard<std::mutex> lock(mx);
        if (m_q.size() > 10)
        {
            m_q.pop();
        }
        m_q.push(r);
        return true;
    }

编译器抱怨: 'twsensors::Repo1': class 模板的使用需要模板参数列表

编译器不会抱怨以下内容:

template <class T>
    bool SaveData(Result<T> &r)
    {
        std::lock_guard<std::mutex> lock(mx);
        if (m_q.size() > 10)
        {
            m_q.pop();
        }
        m_q.push(r);
        return true;
    }

问题在于,如果我创建 class Repo2 :public IRepository<T>,那么它们的 Save 方法将指向相同的定义。

编译错误的原因是什么?

在 class 定义之外实现模板 class 方法时,模板 class 需要模板参数:

template <class T>
bool Repo1<T>::SaveData(Result<T> &r)