Получить имя типа в виде строки в Visual Studio 2010 - PullRequest
1 голос
/ 08 февраля 2011

Как я могу получить имя типа предоставленного типа в виде строки с C ++, используя Visual Studio 2010?

Пример:

class MyClass { ... };

std::string typestr;
typestr = typeof( MyClass );

//typestr should hold "MyClass" now

Ответы [ 3 ]

3 голосов
/ 08 февраля 2011
typeid(type).name();
//Or
typeid(expression).name();

Вернет имя типа. Эта функция «определена реализацией», и стандарт не говорит, что именно должна возвращать функция name, однако в VC ++ она возвращает то, что вам нужно (обратите внимание, что в функции имени g ++ имеет другое поведение ).

Для получения дополнительной информации см. это и это ссылки.

2 голосов
/ 08 февраля 2011

Либо используйте макрос, как говорит @badgerr, если вы можете вывести его во время компиляции. Если вам это нужно во время выполнения, вам нужно включить RTTI (информацию о типе времени выполнения) и использовать оператор typeid, который возвращает объект const type_info&, который имеет метод name. Вы можете использовать его либо с выражением, либо с именем типа.

class myClass{
    // ...
};

int main(void){
    myClass myObject;
    cout << "typeid(myObject).name() = " << typeid(myObject).name() << endl;
    if (typeid(myObject) == typeid(myClass) {
        cout << "It's the same type as myClass" << endl;
    }   
}

Подробнее о typeid.

1 голос
/ 08 февраля 2011

typeid может быть то, что вам нужно.

Или вы можете использовать некрасивые хаки для определения:

//# is the Stringizing operator
#define typeof(X) #X

См. Здесь для документов / предупреждений: http://msdn.microsoft.com/en-us/library/7e3a913x%28v=VS.100%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...