Позвольте мне спросить вас, что вы подразумеваете под "получением" типа?
На самом деле вы можете использовать этот тип, например, вы можете объявить новые переменные этого типа (как вы продемонстрировали в своем примере), без явного указания этого.
Вы хотите сказать, что хотите текстовое описание типа?
Если это так, то нет никакого общего 100% работающего способа сделать это. Это потому, что после компиляции + тип ссылки и имена переменных / функций исчезают. Они просто не существуют во время выполнения.
Однако вы можете написать дополнительный код, чтобы получить текстовое описание нужных вам типов. Один из способов сделать это:
template <typename T> const char* TypeName();
template <> const char* TypeName<int>() { return "int"; }
template <> const char* TypeName<double>() { return "double"; }
// ...
Вы получите ошибку компоновщика, если попытаетесь использовать TypeName
для типа, имя которого вы еще не определили. Затем вам нужно будет добавить соответствующий шаблон специализации TypeName
.