我有一个来自模板类的派生类。我正在重载派生类中的所有虚函数,但我不知道什么用于返回类型
基类:
#ifndef BASEDAO_H
#define BASEDAO_H
template <typename T>
class BaseDAO
{
protected:
virtual void addObject(T)=0;
virtual void removeObject(T)=0;
virtual T getObject();
};
#endif // BASEDAO_H
派生类:
#ifndef MEMBERDAO_H
#define MEMBERDAO_H
#include "basedao.h"
#include "member.h"
class MemberDAO : public BaseDAO<Member>
{
public:
void addObject(Member);
void removeObject(Member);
Member getObject();
};
#endif // MEMBERDAO_H
所有其他方法都有效。当我使用Member作为返回类型时发生错误。提前谢谢。
答案 0 :(得分:1)
问题在我尝试的任何编译器中都没有显示,这可能是转录错误的结果?
使用此设计帮助自己避免一些明显的boobytraps的一种方法是在基本定义中使用特征:
#include <iostream>
#include <string>
template<typename T>
struct Base
{
#if HAVE_CPP11
using value_type = T; // C++11
#else
typedef T value_type;
#endif
virtual value_type get() = 0;
};
struct Derived : public Base<std::string>
{
value_type get() override { return "hello"; }
};
int main()
{
Derived d;
std::cout << d.get() << "\n";
}
返回value_type
和std::string
之间的区别只是我们已经指出不会随意选择返回类型。