C 实施基本类,该基类计算派生类的实例

c++ implementing base class that counts instances of derived class

本文关键字:派生 计算 实例 基类 施基本      更新时间:2023-10-16

我想做一个基础类,可以帮助我存储一些有关类本身的信息。这些变量之一是实例计数器。它计算了类的实例。

通常,我只会使用一个静态成员变量,当调用基本驱动器时调用并减小基本构造函数时,我会增加。问题是,静态成员变量不会重新创建每个派生类。取而代之的是,访问是继承的,这不是单个计数器,而是仅计算继承的基类的数量。那不是我的目标。

我想要的:

  • 柜台应在不必在派生的类中做任何其他事情以外的任何事情
  • 该方法不需要太多的处理能力或内存。

我尝试的是:

  • 使用静态成员(显然失败)
  • 使用普通成员(显然是从一开始就明确的)

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

模板类怎么样:

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 MyClass : Counter<MyClass, Base>
{
    // Implementation...
};

您必须对计数器使用原子变量。

如果您必须使用没有原子支持的C 03。有Boost :: Atomic,或直接致电OS:

  • Windows:使用互锁...()函数。
  • GCC:使用编译器Intrinsics https://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/atomic-builtins.html