我有一个“静态”的模板类相似以下:模板类中的'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