gpt4 book ai didi

c++ - 如何使C++构造跟踪类带参数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:31 25 4
gpt4 key购买 nike

阅读时Ruminations on C++我遇到了用于跟踪对象构造的 Obj_trace 类,只需将其作为跟踪对象类声明的一部分即可:

class Foo {
public:

Obj_trace xxx;
}

它产生如下输出:

Object 1 constructed
Object 2 constructed
Object 1 destroyed
Object 3 constructed

这适用于一个类(class)。现在我想知道如何让它同时处理更多的类,产生类似于这个的输出:

Foo: Object 1 constructed
Bar: Object 1 constructed
Foo: Object 2 constructed

我遇到的最接近的解决方案是 this post由 Nick Gammon 撰写,尽管我想知道是否有一种方法可以使其在不需要继承的情况下工作,并且描述可能超过 1 个字符。

class Obj_trace {
static int count;
int ct;

public:
Obj_trace() : ct(++count) {
cout << "Object " << ct << " constructed" << endl;
}

~Obj_trace() {
cout << "Object " << ct << " destroyed" << endl;
}

Obj_trace(const Obj_trace & ) : ct(++count) {
cout << "Object " << ct << " copy-constructed" << endl;
}

Obj_trace( Obj_trace && ) : ct(++count) {
cout << "Object " << ct << " move-constructed" << endl;
}

Obj_trace & operator =( const Obj_trace & ) {
cout << "Object " << ct << " copy op =" << endl;
return *this;
}

Obj_trace & operator =( Obj_trace && ) {
cout << "Object " << ct << " move op =" << endl;
return *this;
}
};

int Obj_trace::count = 0;

最佳答案

template<typename Outer>
class Obj_trace;

像这样使用它

Obj_trace<Foo> xxx;

这还会为您提供每种对象类型的单独计数。在 Obj_trace 中,您可以使用 typeid(Outer) 获取带有类型名称的 type_info

关于c++ - 如何使C++构造跟踪类带参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189194/

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