我想创建一个基类,帮助我存储有关类本身的一些信息。其中一个变量是实例计数器。它计算类的实例。
通常我会使用一个静态成员变量,我在调用基本构造函数时增加,在调用基本析构函数时减少。问题是不会为每个派生类重新创建静态成员变量。相反,访问是继承的,使得它不是一个单独的计数器,而只是计算继承的基类的数量。 那不是我的目标。
我想要的是什么:
我尝试过:
做这种事的正确方法是什么。
答案 0 :(得分:2)
模板类如何:
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...
};
答案 1 :(得分:0)
你必须为计数器使用原子变量。
如果必须使用没有原子支持的C ++ 03。有boost :: atomic,或直接调用操作系统: