[英]C++ templates and inheritance
我可以這樣混合繼承和模板嗎? :
template <class T>
class AbstractType { // abstract
//....
}
template <class T>
class Type1 : public AbstractType<T> {
//....
}
稍后,我可以像這樣使用這些類:
AbstractType<SomeClass>* var1 = new Type1<SomeClass>();
謝謝你的幫助。
是的你可以。 您可以將模板參數用於任何您想要的內容,並傳遞給包含的基本模板化類。
你可以,但它不會像你想象的那樣有用。 您可以像這樣定義結構:
#include <string>
#include <vector>
using namespace std;
template<typename Val>
class Base
{
public:
virtual Val DoIt() const = 0;
};
template<typename Val>
class Derived : public Base<Val>
{
public:
Derived(const Val& val) : val_(val) {};
Val DoIt() const { return val_; }
protected:
Val val_;
};
int main()
{
Derived<string> sd("my string");
string sd_val = sd.DoIt();
Derived<float> fd(42.0f);
float fd_val = fd.DoIt();
}
但是當你定義抽象基類型時,你經常會想要它們的集合,並且能夠通過基類指針調用以獲得多態行為。 如果您對基類進行模板化,那么您將無法執行此操作,因為模板參數的每個變體都將創建不同的類型。 Base<int>
與Base<string>
完全不同,你不能只獲得指向任何一個的Base*
。
此代碼將無法編譯:
vector<Base*> my_objs;
如果類型與類定義兼容,則可以將任何類型與類模板一起使用
例如
template<class T> struct S{
T mt;
};
這樣的結構可以實例化為T = int,T = double,但不是T = void。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.