所以,我在通用編程中很新,我開始了以下內容:
template<class T>
class A
{
public:
static int m;
}
template<class T>
int A<T>::m;
int main()
{
A::m = 3; //Cannot compile of course !!
return 1
}
這個想法是擁有一個可以被 A 的所有實體共享的成員變數,無論我們有什么 T。
有什么方法可以做到這一點,還是我必須使用全域變數?
uj5u.com熱心網友回復:
類模板的成員永遠不會在類模板的特化之間共享。您應該將類??模板視為:基于不同型別創建類似結構的類的模板。對于每種型別T,專業化A<T>都是一個獨立的類。結果類在其他方面沒有任何關系。
如果你想讓多個類共享一個靜態資料成員,你可以把成員放在一個基類中:
struct ABase
{
static int m;
};
template<class T>
struct A : ABase
{
};
int ABase::m;
int main()
{
A<int>::m = 3;
return A<double>::m; // will return 3
}
盡管通過 訪問成員時,您仍然需要為模板引數指定型別A,因為A它本身根本不是具有成員的類,它只是一個模板,其特化可能會或可能不會m從基類繼承成員。特別是,您可以添加部分特化或顯式(完全)特化,A它們會覆寫A<T>某些型別的定義T,因此不再A<T>::m是這樣。 ABase::m
還要確保這在邏輯上對您的用例有意義。同樣,類模板的特化是不相關的型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/515125.html
標籤:C 模板静态成员
