Я не знаю, соответствует ли это вашим потребностям, но я хотел упомянуть об этом.
Есть кое-что, что вы можете сделать, чтобы получить имя класса, который вы написали. И это можно считать переносимым между gcc и Visual C ++.
В GCC есть магическая переменная с именем __ FUNCTION __ как часть расширения языка GNU C , которая рассматривается как переменная , на С ++. (Относится к нему по-разному в зависимости от версии GCC.)
В Visual Studio есть предопределенный макрос , который имеет то же имя и выполняет ту же работу. Описание здесь .
Вы используете __ FUNCTION __ , чтобы получить имя текущей функции. Таким образом, чтобы получить имя класса, возможно, вы можете использовать его в конструкторе классов, например так:
namespace MyNamespace
{
class MyBaseClass
{
public:
MyBaseClass(): myName(__FUNCTION__){}
string name() { return myName; }
private:
string myName;
};
}
Итак, вы получите "MyBaseClass"
ответ, если вызовете name()
функцию экземпляра этого класса.