В Java, если я хочу использовать имя класса объекта, я могу написать:
String myString = this.getClass().getSimpleName();
Что такое эквивалент в C ++? То есть как я могу получить строку с именем класса *this
?
В стандарте C ++ нет эквивалента. Ближайшее, что вы получите typeid(*this).name()
, но нет гарантии, как будет выглядеть «имя» — результат определяется реализацией. В основном это будет то, что ваш компилятор решил поместить туда, что может соответствовать или не соответствовать имени класса в исходном коде. Увидеть cppreference.com для дополнительной информации.
Если вы хотите узнать имя класса, код которого вы можете изменить, вы можете написать функцию, которая возвращает читаемое имя. Но в остальном вы в основном застряли на том, что вернет приведенный выше код.
Где А класс
typeid(A).name()
Мы можем создать нашу собственную функцию для этого,
class ClassName
{
static std::string const className()
{
return "ClassName";
}
};
std::string const name = ClassName::className();
QObject->metaObject()
метод действителен для Qt
кроме QGraphicsItem
основанные классы, которые не наследуются от QObject
,