Вы можете использовать typeid
, чтобы получить имя любого типа. Хотя это будет варьироваться от компилятора к компилятору и не может быть красивым именем.
#include <iostream>
#include <typeinfo>
struct MyStruct { };
int main()
{
std::cout << typeid(MyStruct).name() << std::endl;
}
Если вам нужно сделать это для большого количества классов, вы можете сделать вызов частью базового класса, тогда любой класс, которому нужна функциональность, может просто наследовать его.
#include <iostream>
#include <typeinfo>
class NamedClass
{
public:
virtual ~NamedClass() { }
std::string getNameAsString()
{
return typeid(*this).name();
}
};
class MyStruct : public NamedClass
{
};
int main()
{
MyStruct ms;
std::cout << ms.getNameAsString() << std::endl;
}