C 实施基本类,该基类计算派生类的实例
c++ implementing base class that counts instances of derived class
我想做一个基础类,可以帮助我存储一些有关类本身的信息。这些变量之一是实例计数器。它计算了类的实例。
通常,我只会使用一个静态成员变量,当调用基本驱动器时调用并减小基本构造函数时,我会增加。问题是,静态成员变量不会重新创建每个派生类。取而代之的是,访问是继承的,这不是单个计数器,而是仅计算继承的基类的数量。那不是我的目标。
我想要的:
- 柜台应在不必在派生的类中做任何其他事情以外的任何事情
- 该方法不需要太多的处理能力或内存。
我尝试的是:
- 使用静态成员(显然失败)
- 使用普通成员(显然是从一开始就明确的)
做这种事情的正确方法是什么。
模板类怎么样:
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
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- 如何使用单独文件中的派生类访问友元函数对象
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- boost::序列化中的派生类偏移量计算.有效吗?
- 使用派生单位进行计算
- C 实施基本类,该基类计算派生类的实例