[英]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()
如何沒有實現,而Derived
的get
的實現使用Base
不可用的新數據成員。
還請注意,與其他純虛擬函數不同,純虛擬析構函數必須具有實現。 通常,如果類中還有其他純函數,則不需要純虛擬析構函數。 它在此處顯示用於說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.