计数器设计

本文介绍了一种使用模板元编程实现的对象计数器。该计数器能够统计继承自特定基类的所有对象实例数量,并提供了两种获取计数的方式:通过对象实例或直接通过类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看到一篇文章说要实现一个计数器的功能,于是通过思索,设计了一个灵活可用性高的对象计数器。

里面闪烁着 很多的火花。


template<class T>

class Object_counter
{
template<class ObejctType>
friend int get_object_count(ObejctType& obj);

template<class ObejctType>
friend int get_object_count();


protected:

Object_counter() {  ++m_count ;  }
~Object_counter(){ --m_count ;   } 

private:
static int m_count;
};


template<class T>
int Object_counter<T>::m_count = 0;


//应该静态断言  ObjectType 为ObjectCounter<T>的子类 -----------可以考虑Loki库里的 静态断言+父类子类判断
template<class ObejctType>
int get_object_count(ObejctType& obj)
{
return Object_counter<ObejctType>::m_count;
}


template<class ObejctType>
int get_object_count()
{
return Object_counter<ObejctType>::m_count;

}









测试---

class A : private Object_counter<A>
{};


class B: public  A , private Object_counter<B>
{};


// 没继承 计数器,计数永远为0
class C

{};


B b1 , b2 , b3 , b4;
A a1; 
C c1;


cout << "B object number :"<< LK::get_object_count<B>() << endl;
cout << "A object number :"<< LK::get_object_count<A>() << endl;
cout << "C object number :"<< LK::get_object_count<C>() << endl;


cout << "B object number :"<< LK::get_object_count(b1) << endl;
cout << "A object number :"<< LK::get_object_count(a1) << endl;
cout << "C object number :"<< LK::get_object_count(c1) << endl;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值