gpt4 book ai didi

c++ - 跟踪对象类型

转载 作者:行者123 更新时间:2023-11-27 22:35:20 27 4
gpt4 key购买 nike

我想要实现的是跟踪我们创建的从基类继承的对象类型。如果一个类继承自基类但未在对象中实例化,我对跟踪它不感兴趣(可以包含或不包含此条件,具体取决于实现是否更容易)

虚拟示例:

template <typename T>
class Person
{
public:
Person() {
T* x;
container.push_back(x);
}
virtual ~Person() {}
private:
static heterogeneous_container container;
};

class Employee : public Person <Employee>
{
};

class Employee2 : public Employee
{
};

另外,我希望它能用于链式继承。难不成当我实例化一个Employee2时,基类Person会在容器中添加一个Employee2类型的指针?

至于异构容器,我觉得可以用这个link

最佳答案

我觉得你想要的更像是:

class Person
{
public:
Person() {
objects.push_back(this);
}
virtual ~Person() {
objects.erase(this);
}
private:
static std::set<const Person*> objects;
};

class Employee : public Person
{
};

class Employee2 : public Employee
{
};

通过这种方式,可以查询容器中每个指针指向的最派生对象的动态类型。

请注意,objects 集必须包含指针,不是每个对象的 type_info。问题在于,在 Employee2 对象的 Person 子对象的构造函数中,*this 的最派生类型将是 Person,而不是 Employee2(它不会变成 Employee2,直到执行进入 Employee2 构造函数)。

关于c++ - 跟踪对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55161026/

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