gpt4 book ai didi

c++ - 模板类中的“静态”模板类——封装、继承还是……?

转载 作者:行者123 更新时间:2023-11-30 04:25:58 26 4
gpt4 key购买 nike

我有一个“静态”模板类,如下所示:

#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>) .我想知道其中是否有任何我应该注意的额外含义。

最佳答案

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

typedef std::char_traits<T>   traits_type;

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

您可以对 StaticClass 执行类似的操作。

typedef StaticClass<sizeof(T)>   sc;

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

关于c++ - 模板类中的“静态”模板类——封装、继承还是……?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11806729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com