繁体   English   中英

C ++抽象基础模板类非无效方法

[英]C++ Abstract Base Template Class Non-Void Method

我有一个抽象的基本模板类,其中包含成员函数,有些是无效的,有些则返回从原始数据类型到模板参数数据类型的数据类型。 我对C ++还是陌生的,我知道我不必一定要在基类中实现纯虚函数,除非我希望在派生类中调用它们。 这个想法对没有返回值的成员函数很好。 对于返回整数的函数,我返回了0。但是当我获得一个返回对T(模板参数)的引用的函数时,我不知道该怎么做。 我尝试了以下两个返回。

template <typename T>
T& AbstractBaseClass<T>::function(){
return T();
}

template <typename T>
T& AbstractBaseClass<T>::function(){
return T& tmp= T();
}

但是它们似乎都不起作用,我无法定义这些函数,因为我得到了这些函数的未定义参考错误。 我认为此错误是因为函数是模板。 实现非无效的纯虚函数的适当方法是什么?

template <typename T>
class AbstractBaseClass{
public:
virtual ~AbstractBaseClass() = 0;
T& function();
}

template <typename T>
T& AbstractBaseClass<T>::function(){
    //what must I do here when I don't have any member variable
}

这是一个纯虚函数和一个实现它的派生类的示例(为清楚起见,省略了一些成员函数):

template <class T>
class Base
{
   public:
     virtual T& get() = 0;
     virtual ~Base() = 0;
};

template <class T>
Base<T>::~Base() {}

template <class T>
class Derived: public Base<T>
{
   T t;
   public:
     T& get() override { return t; }
};

请注意, Base get()如何没有实现,而Derivedget的实现使用Base不可用的新数据成员。

还请注意,与其他纯虚拟函数不同,纯虚拟析构函数必须具有实现。 通常,如果类中还有其他纯函数,则不需要纯虚拟析构函数。 它在此处显示用于说明。

暂无
暂无

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

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