C ++抽象基模板类非空方法

时间:2017-03-22 06:48:13

标签: c++ templates pure-virtual

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

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

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

但似乎都不起作用,我不能定义这些函数,因为我得到函数的未定义引用错误。我认为这个错误是因为函数是模板。实现非void纯虚函数的适当方法是什么?

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
}

1 个答案:

答案 0 :(得分:3)

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

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; }
};

请注意get()中的Base没有实施,getDerived的实施使用了Base中没有的新数据成员。< / p>

另请注意,纯虚拟析构函数与其他纯虚函数不同,必须具有实现。通常,如果类中还有其他纯函数,则不需要纯虚拟析构函数。这里显示的是插图。