我有一个“静态”模板类,如下所示:
#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)。
所以我正在考虑以下三种方法之一:
- 继承自
StaticClass
(那就是多重继承), - 定义
StaticClass
的静态成员类型, - 正在访问
StaticClass<sizeof(T)>
直接在方法中。
所有这三种方法都会产生相似的源代码(需要以某种方式显式指定类),并且它们都不会影响 sizeof(MainDerived<T>)
.我想知道其中是否有任何我应该注意的额外含义。
最佳答案
我看到了与标准库的字符串类的相似之处,它(实际上)有一个带有所有静态成员的辅助类的 typedef,比如
typedef std::char_traits<T> traits_type;
然后在其余代码中使用traits_type::copy
、traits_type::assign
等。
您可以对 StaticClass
执行类似的操作。
typedef StaticClass<sizeof(T)> sc;
然后使用sc::priv
访问每个类的正确指针。
关于c++ - 模板类中的“静态”模板类——封装、继承还是……?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11806729/