C++ ';静态';模板类中的模板类—;封装、继承还是…;?
我有一个类似于以下内容的“静态”模板类:C++ ';静态';模板类中的模板类—;封装、继承还是…;?,c++,templates,static,C++,Templates,Static,我有一个类似于以下内容的“静态”模板类: #include <cstddef> template <size_t elem_size> struct StaticClass { static void* priv; }; 现在,我希望main派生的能够访问StaticClass;这意味着相同大小的不同类型T将访问相同的变量这样做的最佳方法是什么?我主要考虑的是内存占用 AFAICS在main派生的中有一个非静态的StaticClass成员,会将类大小增加1(因
#include <cstddef>
template <size_t elem_size>
struct StaticClass
{
static void* priv;
};
现在,我希望main派生的
能够访问StaticClass
;这意味着相同大小的不同类型T
将访问相同的变量这样做的最佳方法是什么?我主要考虑的是内存占用
AFAICS在main派生的中有一个非静态的StaticClass
成员,会将类大小增加1(因为“静态”类的大小为1)
所以我想到了三种方法中的一种:
继承自StaticClass
(这是一个多重继承)
定义StaticClass
类型的静态成员
直接访问方法中的StaticClass
这三种方法都将产生类似的源代码(需要以某种方式明确指定类),并且它们都不会影响sizeof(main派生)
。我想知道其中是否有我应该注意的其他含义。我看到了与标准库的string类的相似之处,它(实际上)为包含所有静态成员的helper类提供了typedef,如
typedef std::char_traits<T> traits_type;
然后使用sc::priv
访问每个类的正确指针。我希望成员特定于特定的StaticClass
->这意味着什么?如果两个main的实例使用不同的模板参数T
,但两个T
类型的大小相同,会怎么样?那么,静态类将是相同的,即使T
不同。@Mr.Anubis,@JoachimPileborg:我编辑了这篇文章来澄清这一点。简而言之,这意味着每个元素大小都有一个变量;对于大小相同的不同T
,应共享变量。
typedef std::char_traits<T> traits_type;
typedef StaticClass<sizeof(T)> sc;