我有一个'静态'模板类,如下所示:
#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(因为'static'类的大小为1)。
所以我想到了三种方法中的任何一种:
StaticClass
(这是多重继承),StaticClass
类型的静态成员StaticClass<sizeof(T)>
。所有这三种方法都会产生类似的源代码(需要以这种或那种方式明确指定类),它们都不会影响sizeof(MainDerived<T>)
。我想知道是否有任何其他含义我应该知道。
答案 0 :(得分:2)
我看到与标准库的字符串类有相似之处,它实际上有一个带有所有静态成员的helper类的typedef,比如
typedef std::char_traits<T> traits_type;
然后在代码的其余部分使用traits_type::copy
,traits_type::assign
等。
您可以使用StaticClass
执行类似操作。
typedef StaticClass<sizeof(T)> sc;
然后使用sc::priv
访问每个类的正确指针。