编译错误 - 定义模板化抽象的具体实现 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)
我的头文件中有一个摘要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)