Je veux compter toutes les instances de derivers de ma classe, je suis en train de le faire comme ceci:Essayer de compter des instances de classes dérivées, type_id ne fonctionne pas
.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
fichier .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 ;
}
}
J'ai deux héritières qui ressemblent à ceci (le cpp contient des implémentations vides):
#pragma once
#include "parant.h"
class ChildA :
public Parant
{
public:
ChildA(void);
virtual ~ChildA(void);
};
ce qui est la fonction principale:
int main()
{
ChildA a;
ChildB b;
ChildA a1;
Parant::PrintInstances();
....
Le résultat que je reçois est:
typename: [email protected]@ ;; count: 3
Pourquoi ça ne marche pas?
je l'ai changé pour
AddInstance(typeid(*this).raw_name());
Bien sûr, il ne fonctionne toujours pas, mais maintenant je comprends pourquoi ... puis-je faire fonctionner?
juste un petit détail, Parant devrait probablement être parent? – Anycorn
merci :-). d'autres charachters pour le bien de stackoverflow –
Je soupçonne d'une façon ou d'une autre, l'Enfant doit dire au Parent ce que c'est. – UncleBens