【发布时间】:2012-08-02 03:38:46
【问题描述】:
我有一个类似于以下的“静态”模板类:
#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>)。我想知道其中是否有我应该注意的其他含义。
【问题讨论】:
-
I would like the members to be specific to a particular StaticClass<elem_size>-> 什么意思? -
如果
MainDerived的两个实例使用不同的模板参数T,但两个T类型的大小相同怎么办?那么静态类将是相同的,即使T不同。 -
@Mr.Anubis, @JoachimPileborg:我编辑了这篇文章以澄清一点。简而言之,这意味着每个
elem_size都有一个变量;对于大小相同的不同T,变量应该是共享的。