Я пытаюсь вставить type_id в мой проект Arduino. Включение RTTI не вариант, но мне нужен способ определить тип объекта во время выполнения (и не более того).
Я прочитал много статей и постов StackOverflow по этому вопросу (и я буду администрировать, я не понимаю всего этого), но какой бы пример я ни пытался реализовать, он почему-то не выполняет то, что я хочу, что является возвращением type_id производного класса.
Базовый пример (на основе кода Акселя Мензеля) возвращает следующее:
Hello World
а: 1
Би 2
b2: 1
Я не понимаю, почему b2 возвращает 1.
Кто-нибудь может пролить свет на это для меня?
#include <iostream>
using namespace std;
static int generateId()
{
static int typeID; // automatically init with 0
return ++typeID;
}
template <typename T>
struct MetaTypeInfo
{
static int getTypeInfo()
{
static const int typeID = generateId();
return typeID;
};
};
class ClassA {
public:
virtual ~ClassA() {};
static MetaTypeInfo<ClassA> typeinfo;
};
class ClassB: public ClassA {
public:
virtual ~ClassB() {};
static MetaTypeInfo<ClassB> typeinfo;
};
int main()
{
cout << "Hello World" << endl;
ClassA a;
ClassB b;
ClassA* b2 = new ClassB();
cout << "a: " << a.typeinfo.getTypeInfo() << endl;
cout << "b: " << b.typeinfo.getTypeInfo() << endl;
cout << "b2: " << b2->typeinfo.getTypeInfo() << endl;
return 0;
}