C++ 如何制作C++;构造跟踪类取参数?

C++ 如何制作C++;构造跟踪类取参数?,c++,debugging,constructor,C++,Debugging,Constructor,在阅读过程中,我遇到了一个Obj_跟踪类,它用于跟踪对象的构造,只需将其作为跟踪对象类声明的一部分: class-Foo{ 公众: … Obj_trace xxx; } 它产生如下输出: 构建对象1 对象2已构建 对象1已销毁 对象3 这在一个类中很有效。现在我想知道如何使它同时与更多类一起工作,从而产生类似于此的输出: Foo:构建对象1 条:对象1已构造 Foo:构建对象2 我遇到的最接近的解决方案是Nick Gammon的,尽管我想知道是否有一种方法可以使它在不需要继承的情况下工作,

在阅读过程中,我遇到了一个Obj_跟踪类,它用于跟踪对象的构造,只需将其作为跟踪对象类声明的一部分:

class-Foo{
公众:
…
Obj_trace xxx;
}
它产生如下输出:

构建对象1
对象2已构建
对象1已销毁
对象3
这在一个类中很有效。现在我想知道如何使它同时与更多类一起工作,从而产生类似于此的输出:

Foo:构建对象1
条:对象1已构造
Foo:构建对象2
我遇到的最接近的解决方案是Nick Gammon的,尽管我想知道是否有一种方法可以使它在不需要继承的情况下工作,并且可能具有超过1个字符的描述

类对象跟踪{
静态整数计数;
int-ct;
公众:
目标跟踪():ct(++计数){
cout
模板
类对象跟踪;
像这样使用它

Obj_trace<Foo> xxx;
Obj_trace xxx;

这也将为每个对象类型提供单独的计数。在
Obj_trace
内部,您可以使用
typeid(外部)
获取带有类型名称的
type\u info

你有RTTI吗?你也许可以让它接受
void*
,并始终传递
,然后将计数保存在typeid的静态映射中进行计数。@dyp:我不知道它是否与composition一起计算为CRTP。但它非常相似,只是替换了一个成员子对象而不是基本子对象。当然,取消了向下转换的功能,但这里不需要。这是对接受答案的一个很好的补充,输出类似于
if(status==0)cout这正是它。
cout
Obj_trace<Foo> xxx;