我有一個「靜態」的模板類相似以下:模板類中的'Static'模板類 - 封裝,繼承或...?
#include <cstddef>
template <size_t elem_size>
struct StaticClass
{
static void* priv;
};
所以,該類僅包含靜態成員。如靜態模板所暗示的,每個elem_size
應該有一個priv
變量。
我也有這已經是從另一個類繼承的主模板類:
template <class T>
class MainBase
{
// types, methods...
};
template <class T>
class MainDerived : public MainBase<T>
{
// members, methods...
};
現在,我想MainDerived
能夠訪問StaticClass<sizeof(T)>
;暗示相同大小的不同類型T
將訪問相同的變量。 這樣做的最佳方法是什麼?我主要考慮內存佔用。
AFAICS,在MainDerived
中有一個非靜態的StaticClass<sizeof(T)>
成員,將類大小增加1(對於'靜態'類的大小爲1)。
所以我想任的三種方法:
- 從
StaticClass
(這是一個多重繼承,然後)繼承, - 定義
StaticClass
類的靜態成員, - 在訪問
StaticClass<sizeof(T)>
直接的方法。
這三種方法都將導致一個類似的源代碼(需要的類這樣或那樣的明確規範),他們都不會影響sizeof(MainDerived<T>)
。我想知道他們中是否有其他含義我應該知道。
'我想要成員是特定的StaticClass' - >這是什麼意思? –
2012-08-04 07:20:49
如果兩個'MainDerived'實例使用不同的模板參數'T',但兩個'T'類型的大小相同?那麼即使'T'不同,靜態類也是一樣的。 – 2012-08-04 07:21:53
@Anubis先生,@JoachimPileborg:我編輯了這篇文章,澄清了一點。簡單地說,這意味着每個'elem_size'都有一個變量;對於具有相同大小的不同'T',應該共享該變量。 – 2012-08-04 07:28:54