C++:CRTP:如何知道所有对象计数
C++: CRTP: How to know all objects count?
我需要你们在CRTP中的帮助(可能是基本问题,对此感到抱歉)。这是基于以下帖子:C++对象生存期分析如何统计模板类的CRTP子类数量?
使用 CRTP,我们可以计算为每个类类型创建的对象数量。但是,使用这种方法,我找不到系统中创建的对象总数。
有什么办法可以做到这一点吗?
提前谢谢。
问候SNR
此解决方案包含(每个类和全局)计数器的代码。
extern size_t Global_counter; //In .cpp file define it: size_t Global_counter = 0;
template <class T>
class CountedClass
{
protected:
static size_t this_class_counter;
public:
static size_t GetThisClassCounter()
{
return this_class_counter;
}
static size_t GetGlobalCounter()
{
return Global_counter;
}
CountedClass()
{
++this_class_counter;
++Global_counter;
}
};
template <class T>
size_t CountedClass<T>::this_class_counter = 0;
示例用法:
class A : public CountedClass<A>
{
public:
A() : CountedClass<A>()
{
}
};
class B : public CountedClass<B>
{
public:
B() : CountedClass<B>()
{
}
};
A a1;
A a2;
B b2;
std::cout<<A::GetThisClassCounter(); //prints 2
std::cout<<A::GetGlobalCounter(); //prints 3
std::cout<<B::GetThisClassCounter(); //prints 1
std::cout<<B::GetGlobalCounter(); //prints 3
让所有类都继承自一个公共基类,该基类保留一个计数器,类似于
class Counter {
static int count = 0;
protected:
Counter() { count++; }
public:
int getCount() { return count; }
};
由于要计算所有实例,因此不需要区分不同的派生类,因此不需要 CRTP。
如果需要这两个计数,则可以使用类似于上面的类作为 CRTP 类的基类。
相关文章:
- Qt调试:我如何知道QCoreApplication::notifyInternal2正在向哪个对象发送消息?
- 我如何知道COM对象与不同的COM UUIDS兼容
- delete如何知道对象在内存中的起始位置
- 这些情况有什么区别?我怎么知道什么是临时对象?
- C++ csv 文件无法正确加载到矢量,它似乎知道对象在那里但不显示它们
- 在不知道其类型的情况下使用多个对象的相同方法
- 为什么在编译时需要知道对象的内存配置文件以进行堆栈放置?
- 我怎么知道C++编译器是否制作线程安全的静态对象代码
- 将任意函数对象存储到类成员容器中,而无需知道其声明签名
- 让对象知道它创建的 show 函数中发生了什么
- C++知道编译时给定类型的对象数
- 如何知道创建对象时是否未传入参数?
- 我可以在动态知道其类型的模板类对象中使用 auto 关键字吗?我不能在没有初始值设定项的情况下使用 auto 关键字吗?
- 我怎么知道基类对象的指针数组中元素的类型,它将为派生类分配内存
- 对象文件"Version References"从何而来?
- 对象指针如何知道要删除多少内存
- C++:CRTP:如何知道所有对象计数
- 如何在使用此数组初始化对象时知道数组的大小
- C++ 组合,对象如何知道它所在的类
- 对象如何知道它是在堆栈上还是在堆上分配的