gpt4 book ai didi

c++ - 尝试计算派生类的实例,type_id 不起作用

转载 作者:行者123 更新时间:2023-11-30 00:59:46 26 4
gpt4 key购买 nike

我想计算我类(class)的所有派生实例,我正在尝试这样做:

.h文件:

#ifndef _Parant
#define _Parant

#include<map>

class Parant
{
public:
Parant();
virtual ~Parant();
static void PrintInstances();

private:
static void AddInstance(const char* typeName);
static std::map<const char*, int> InstanceCounter;
};

#endif

.cpp 文件:

#include "Parant.h"
#include <typeinfo>
#include <iostream>

using namespace std;

Parant::Parant()
{
AddInstance(typeid(this).raw_name());
}


Parant::~Parant()
{
}


std::map<const char*, int> Parant::InstanceCounter;

void Parant::AddInstance(const char* typeName)
{
InstanceCounter[typeName]++;
}


void Parant::PrintInstances()
{
for(map<const char*,int>::iterator i = InstanceCounter.begin(); i != InstanceCounter.end(); i++)
{
cout << " typename: " << i -> first << " ;;" ;
cout << " count: " << i -> second << endl ;
}

}

我有两个看起来像这样的继承者(cpp 包含空实现):

#pragma once
#include "parant.h"
class ChildA :
public Parant
{
public:
ChildA(void);
virtual ~ChildA(void);
};

这是主要功能:

int main()
{
ChildA a;
ChildB b;
ChildA a1;

Parant::PrintInstances();
....

我得到的结果是:

 typename: .PAVParant@@ ;; count: 3

为什么它不起作用?

我改成了

AddInstance(typeid(*this).raw_name());

当然它仍然不起作用,虽然现在我明白为什么......我可以让它工作吗?

最佳答案

typeid(*this) 在构造函数中只产生构造函数的类(你有它 typeid(this) 但无论如何这是错误的,因为它只会给你 type_info一个指针)。这被认为是构造期间对象的动态类型。

另一个区别是构造期间调用的虚函数不会在派生类中结束,而是在构造期间进行调用的类中结束。

关于c++ - 尝试计算派生类的实例,type_id 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3746742/

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