Вам нужно сделать typeid(*component)
, чтобы получить тип динамического c указываемого объекта, а не объявленный тип его typename или указателя на него.
Естественно, typeid(T)
всегда будет T
. Таким образом, если вы передаете указатель менее производного типа T* component
, то typeid(T)
не эквивалентен typeid(*component)
.
Кроме того, если вы пытались typeid(component)
без разыменования, то вам следует получить тип указателя, а не тип того, на что он указывает, что не должно быть правильным.
Наконец, хотя это кажется уже гарантированным в вашем случае, стоит отметить, что объекты должны быть полиморфными c, чтобы это работало, т. Е. Иметь хотя бы одну виртуальную функцию-член. В противном случае RTTI, в котором это необходимо, не будет существовать.