gpt4 book ai didi

C++:CRTP:如何知道所有对象都计数?

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:23 25 4
gpt4 key购买 nike

我需要你们在 CRTP 方面提供帮助(可能是基本问题,抱歉)。这是基于以下帖子: C++ object lifetime profiling How to count the number of CRTP subclasses of a template class?

使用 CRTP,我们可以计算为每个类类型创建的对象数。但是,使用这种方法我无法找到系统中创建的对象总数。

有什么办法可以实现吗?

提前致谢。

问候,信噪比

最佳答案

此解决方案包含(每类和全局)计数器的代码。

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

关于C++:CRTP:如何知道所有对象都计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com