簡體   English   中英

使用非模板化的類作為父級

[英]Use non-templated version of class as parent

我正在努力將項目從C#移植到C ++,並且在使用模板時遇到問題,我需要同時擁有一個非模板化版本和一個模板化版本,其中一個類別是另一個類別,即:

class DataBuffer // Holds generic databuffer functions (getting size in bytes etc)
{
public:
    int32 getVal() { return 10; }
};

template <typename T>
class DataBuffer<T> : public DataBuffer // Able to retrieve data as a type...
{
public:
    int32 getSizeOfT() { return sizeof(T); }
};

我有接受任何類型的DataBuffer作為參數的方法,因此模板化整個類是不可能的,有沒有辦法在不重命名基類的情況下這樣做?

任何幫助將不勝感激。

編輯:此代碼不編譯,並在編譯時拋出以下錯誤:

error C2989: 'DataBuffer' : class template has already been declared as a non-class template

不幸的是,沒有辦法這樣做。 我認為標准的相關部分是:

除(14.5.4)中指定的情況外,類模板不得與同一范圍(3.3)中的任何其他模板,類,函數,對象,枚舉,枚舉器,命名空間或類型具有相同的名稱。 除了函數模板可以由具有相同名稱的(非模板)函數或具有相同名稱的其他函數模板(14.8.3)重載之外,在命名空間作用域或類作用域中聲明的模板名稱在那范圍。

但是,應該接受每種類型的DataBuffer也可以成為模板,因此從公共庫繼承將變得不必要。

如錯誤所示,類模板不能與非模板具有相同的名稱。

您必須重命名基類或模板。

您需要為類和類模板提供不同的名稱或將它們放入不同的名稱空間:類和類模板不能具有完全相同的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM