簡體   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