LINUX.ORG.RU

[c++] typeid. Заставить возвращать число?

 


0

3

Есть такая функция(?), которая возвращает имя типа переменной

Пример:

#include <typeinfo>
#include <iostream>

class MyClass
{};

int main()
{
    int i=0;
    MyClass a;
    std::cout << typeid(i).name() << std::endl;
    std::cout << typeid(a).name() << std::endl;
    return 0;
}

Итог:

i
7MyClass

Как видно для int она вернула i, и это удобно т.к. для варианта в switch переменная типа char отлично подходит. А вот для класса она вернула полное его Название и количество буков в нём, а это уже не хорошо т.к. для запихивания в свич строка не подходит, поэтому нужно вернуть номер, но как?

P.S. Сравнение строк не пройдёт - производительность упадёт во много раз, что критично для выполнения в реальном времени.

Ответ на: комментарий от Boy_from_Jungle

ну вообще логично было бы, что нельзя

namezys ★★★★
()
Ответ на: комментарий от anonymous

>> Свичи должны переключаться в зависимости от типа. А тип определяется переменной.

Плюсплюсеры познают необходимость нормальных ЯП.


Нет, это недоплюсеры не знают про виртуальные методы.


Таких, кстати, много...

LamerOk ★★★★★
()

Как уже написали выше, стоит посмотреть реализацию класс QMetaType в Qt, конктернее шаблонную функцию int qMetaTypeId<T>(). Возможно знатоки Boost подскажут аналогичное решение в одноимённой библиотеке.

Dendy ★★★★★
()

Раз тема ещё не совсем здохла, есть вопрос:

Кажется я нашёл решение, но по моему опять костыльное (или нет?)

template <typename T> f(T *A, T*B, byte arg)
{
    ...
    if(T = int)
    ...
}

Или не проканает?

NaViKotE
() автор топика
Ответ на: комментарий от NaViKotE

> if(T = int)

Frak me! Бросай ты эти кресты, они тебе ни к чему.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.