繁体   English   中英

如何使用泛型返回类型覆盖虚函数

[英]How to override a virtual function with a generic return type

我有一个模板类的派生类。 我正在重载派生类中的所有虚函数,但我不知道返回类型使用什么

基类:

#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 作为返回类型时发生错误。 提前致谢。

这个问题在我尝试过的任何编译器中都没有出现,这可能是转录错误的结果?

通过这种设计帮助自己避免一些明显的陷阱的一种方法是在基本定义中使用特征:

#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_typestd::string之间的区别只是我们已经表明返回类型不是任意选择的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM