1

我有一个类似于以下的“静态”模板类:

#include <cstddef>

template <size_t elem_size>
struct StaticClass
{
    static void* priv;
};

因此,该类仅包含静态成员。正如静态模板所暗示的那样,priv每个elem_size.

我也有已经从另一个类继承的主模板类:

template <class T>
class MainBase
{
    // types, methods...
};

template <class T>
class MainDerived : public MainBase<T>
{
    // members, methods...
};

现在,我希望MainDerived能够访问StaticClass<sizeof(T)>;这意味着T相同大小的不同类型将访问相同的变量。这样做的最佳方法是什么?我主要考虑内存占用。

AFAICS,具有非静态StaticClass<sizeof(T)>成员MainDerived将类大小增加 1(对于“静态”类的大小为 1)。

所以我正在考虑三种方法中的任何一种:

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

所有三种方法都将产生相似的源代码(需要以一种或另一种方式明确说明类),并且它们都不会影响sizeof(MainDerived<T>). 我想知道其中是否有我应该注意的其他含义。

4

1 回答 1

2

我看到了与标准库的字符串类的相似之处,它(实际上)有一个用于具有所有静态成员的助手类的 typedef,比如

typedef std::char_traits<T>   traits_type;

然后在其余代码中使用traits_type::copy,traits_type::assign等。

你可以用你的StaticClass.

typedef StaticClass<sizeof(T)>   sc;

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

于 2012-08-04T09:21:32.220 回答