Możesz spróbować użyć opcji "typeid".
To nie działa dla nazwy obiektu, ale TY znasz nazwę obiektu, więc będziesz musiał go gdzieś przechowywać. Kompilator nie dba o to, co nazwałeś obiekt.
Warto jednak pamiętać, że wyjście typu id jest kompilatorem, więc nawet jeśli produkuje to, co jest na obecnej platformie, może nie na innym. To może być lub nie być problemem dla Ciebie.
Drugim rozwiązaniem jest utworzenie jakiegoś szablonu opakowania, w którym przechowujesz nazwę klasy. Następnie musisz użyć częściowej specjalizacji, aby uzyskać poprawną nazwę klasy. Ma to tę zaletę, że działa podczas kompilacji, ale jest znacznie bardziej złożona.
Edit: Być bardziej wyraźne
template< typename Type > class ClassName
{
public:
static std::string name()
{
return "Unknown";
}
};
Następnie dla każdej klasy liek somethign następujące:
template<> class ClassName<MyClass>
{
public:
static std::string name()
{
return "MyClass";
}
};
Który może być nawet macro'd następująco:
#define DefineClassName(className) \
\
template<> class ClassName<className> \
{ \
public: \
static std::string name() \
{ \
return #className; \
} \
}; \
Umożliwienie możesz po prostu wykonać:
DefineClassName(MyClass);
Wreszcie, aby uzyskać nazwę klasy, którą należy wykonać następujące czynności:
ClassName<MyClass>::name();
Edit2: Opracowanie dalej którą następnie trzeba umieścić ten „DefineClassName” makro w każdej klasie można zrobić i zdefiniować " classname "funkcja, która wywołałaby funkcję statycznego szablonu.
Edit3: I o tym myśleć ... jej oczywiście złe księgowania pierwszą rzeczą, w godzinach porannych, jak może równie dobrze zdefiniować funkcję Member „classname()” w następujący sposób:
std::string classname()
{
return "MyClass";
}
które mogą być macro'd następująco:
DefineClassName(className) \
std::string classname() \
{ \
return #className; \
}
Następnie można po prostu tylko kropla
DefineClassName(MyClass);
do cl tyłek podczas definiowania ...
Jestem zdezorientowany. Czy łączysz "klasę C++" z "klasą uczniów"? Jeśli masz "klasę" reprezentującą klasę, a klasa ma nazwę taką jak "Przedszkole Mr Gutentag", powinna ona mieć element danych do przechowywania tego jako 'std :: string'. – Potatoswatter
@Potatoswatter: Teraz jestem zdezorientowany. O co pytasz? – Lazer
Istnieją dwa znaczenia słowa "klasa", a rodzaj zajęć z uczniami nie jest tym, do czego odnosi się słowo "klasa". – Potatoswatter