gpt4 book ai didi

c++实现计算派生类实例的基类

转载 作者:搜寻专家 更新时间:2023-10-31 02:08:25 25 4
gpt4 key购买 nike

我想创建一个基类来帮助我存储有关该类本身的一些信息。这些变量之一是实例计数器。它计算类的实例。

通常我只使用一个静态成员变量,当基类构造函数被调用时我会增加它,而当基类析构函数被调用时我会减少它。问题是静态成员变量不会为每个派生类重新创建。相反,访问是继承的,使它不是一个单独的计数器,而是一个简单地计算继承的基类数量的计数器。那不是我的目标。

我想要的:

  • 除了派生自基类之外,计数器无需在派生类中执行任何操作即可工作
  • 该方法不需要太多的处理能力或内存。

我尝试过的:

  • 使用静态成员(显然失败了)
  • 使用普通成员(显然失败了,从一开始就很清楚)

做这种事情的正确方法是什么。

最佳答案

模板类怎么样,比如:

template <typename Derived, typename ... Bases>
class Counter : Bases... {
public:
Counter() { ++count; }
Counter(const Counter& rhs) : Bases(rhs)... { ++count; }
Counter(Counter&& rhs) : Bases(std::move(rhs))...{ ++count; }

~Counter() { --count; }

private:
static std::size_t count;
};

template <typename Derived, typename ... Bases>
std::size_t Counter<Derived, Bases...>::count = 0;

所以你的类(class)会是

class MyClass : Counter<MyClass, Base>
{
// Implementation...
};

关于c++实现计算派生类实例的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47569405/

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