2012-08-04 96 views
0

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

所以我想任的三种方法:

  1. StaticClass(这是一个多重继承,然后)继承,
  2. 定义StaticClass类的静态成员,
  3. 在访问StaticClass<sizeof(T)>直接的方法。

这三种方法都将导致一个类似的源代码(需要的类这样或那样的明确规范),他们都不会影响sizeof(MainDerived<T>)。我想知道他们中是否有其他含义我应该知道。

+1

'我想要成员是特定的StaticClass ' - >这是什么意思? – 2012-08-04 07:20:49

+0

如果两个'MainDerived'实例使用不同的模板参数'T',但两个'T'类型的大小相同?那么即使'T'不同,静态类也是一样的。 – 2012-08-04 07:21:53

+0

@Anubis先生,@JoachimPileborg:我编辑了这篇文章,澄清了一点。简单地说,这意味着每个'elem_size'都有一个变量;对于具有相同大小的不同'T',应该共享该变量。 – 2012-08-04 07:28:54

回答

1

我看到标准库的string类,它(实际上)具有与所有静态成员一个辅助类的类型定义的相似性,像

typedef std::char_traits<T> traits_type; 

,然后使用traits_type::copytraits_type::assign等,都通过其余的代码。

你可以用你的StaticClass做类似的事情。

typedef StaticClass<sizeof(T)> sc; 

然后用sc::priv来访问每个类的正确指针。