typeid. Максимальная длина имени типа
От: Aleх  
Дата: 22.01.11 19:48
Оценка:
В каких случаях typeid(...).name() возвращает
struct ?? :: ??

Я подозреваю, тогда, когда длина имени слишком большая. Но никакой информации подтверждающий мои предположения я не нашел.

Возможно ли как нибудь менять значение максимально разрешенной длины имени типа? Например на VC++.
Re: typeid. Максимальная длина имени типа
От: Kerbadun  
Дата: 22.01.11 22:41
Оценка:
Здравствуйте, Aleх, Вы писали:

A>В каких случаях typeid(...).name() возвращает

A>
A>struct ?? :: ??
A>

A>Я подозреваю, тогда, когда длина имени слишком большая. Но никакой информации подтверждающий мои предположения я не нашел.

Может, айдишники русскоязычные?

Когда он умрет, его мозг заспиртуют в стакане
Re[2]: typeid. Максимальная длина имени типа
От: Aleх  
Дата: 23.01.11 12:44
Оценка:
Здравствуйте, Kerbadun, Вы писали:

K>Здравствуйте, Aleх, Вы писали:


A>>В каких случаях typeid(...).name() возвращает

A>>
A>>struct ?? :: ??
A>>

A>>Я подозреваю, тогда, когда длина имени слишком большая. Но никакой информации подтверждающий мои предположения я не нашел.

K>Может, айдишники русскоязычные?

Нет, всё на английском языке.
Re[3]: typeid. Максимальная длина имени типа
От: Kerbadun  
Дата: 24.01.11 00:48
Оценка:
Здравствуйте, Aleх, Вы писали:

A>>>В каких случаях typeid(...).name() возвращает

A>>>
A>>>struct ?? :: ??
A>>>

A>>>Я подозреваю, тогда, когда длина имени слишком большая. Но никакой информации подтверждающий мои предположения я не нашел.

K>>Может, айдишники русскоязычные?

A>Нет, всё на английском языке.

А какое точное наименование и версия компилятора?

Когда он умрет, его мозг заспиртуют в стакане
Re[3]: typeid. Максимальная длина имени типа
От: Kerbadun  
Дата: 24.01.11 04:56
Оценка:
Здравствуйте, Aleх, Вы писали:

A>>>В каких случаях typeid(...).name() возвращает

A>>>
A>>>struct ?? :: ??
A>>>

A>>>Я подозреваю, тогда, когда длина имени слишком большая. Но никакой информации подтверждающий мои предположения я не нашел.

Да, и какой исходный идентификатор полностью?

Когда он умрет, его мозг заспиртуют в стакане
Re: typeid. Максимальная длина имени типа
От: ArtDenis Россия  
Дата: 24.01.11 11:15
Оценка:
Может для этого типа в точке вызова typeid(...).name() есть только предварительное объявление, а полное отсутствует?
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: typeid. Максимальная длина имени типа
От: DmitryShm Россия https://ipshmykov.ru/
Дата: 30.01.11 01:37
Оценка:
Здравствуйте, Aleх, Вы писали:

A>В каких случаях typeid(...).name() возвращает

A>
A>struct ?? :: ??
A>

A>Я подозреваю, тогда, когда длина имени слишком большая. Но никакой информации подтверждающий мои предположения я не нашел.

A>Возможно ли как нибудь менять значение максимально разрешенной длины имени типа? Например на VC++.


Быть может компилируешь с выключенной RTTI?
typeid rtti
Re[2]: typeid. Максимальная длина имени типа
От: jyuyjiyuijyu  
Дата: 30.01.11 07:37
Оценка:
Здравствуйте, Kerbadun, Вы писали:

K>Здравствуйте, Aleх, Вы писали:


A>>В каких случаях typeid(...).name() возвращает

A>>
A>>struct ?? :: ??
A>>

A>>Я подозреваю, тогда, когда длина имени слишком большая. Но никакой информации подтверждающий мои предположения я не нашел.

K>Может, айдишники русскоязычные?

msvc2008
struct _1024(){}; typeid выводит 1031 символ
name + struct\x20 а вот уже struct _4096(){};
пишет
fatal error C1064: compiler limit : token overflowed internal buffer
#define _1() h
#define _4() _1() ## _1() ## _1() ## _1()
#define _16() _4() ## _4() ## _4() ## _4()
#define _64() _16() ## _16() ## _16() ## _16()
#define _256() _64() ## _64() ## _64() ## _64()
#define _1024() _256() ## _256() ## _256() ## _256()
#define _4096() _1024() ## _1024() ## _1024() ## _1024()
#define _16384() _4096() ## _4096() ## _4096() ## _4096()
#define _65536() _16384() ## _16384() ## _16384() ## _16384()

struct _4096(){};

int main(){
    puts(typeid(_4096()).name());
    printf("%lu\n", strlen(typeid(_4096()).name()));
}
Re[2]: typeid. Максимальная длина имени типа
От: jyuyjiyuijyu  
Дата: 30.01.11 08:48
Оценка:
а вот длинна литерала
4096 еще компилится а вот 16384 уже пишет
error C2026: string too big, trailing characters truncated
#define _1() h
#define _4() _1() ## _1() ## _1() ## _1()
#define _16() _4() ## _4() ## _4() ## _4()
#define _64() _16() ## _16() ## _16() ## _16()
#define _256() _64() ## _64() ## _64() ## _64()
#define _1024() _256() ## _256() ## _256() ## _256()
#define _4096() _1024() ## _1024() ## _1024() ## _1024()
#define _16384() _4096() ## _4096() ## _4096() ## _4096()
#define _65536() _16384() ## _16384() ## _16384() ## _16384()
#define kku(z) #z
#define stringize(e) kku(e)
//struct _1024(){};

int main(){
    char buf[] = stringize(_16384());
    puts(buf);
    //puts(typeid(_1024()).name());
    //printf("%lu\n", strlen(typeid(_1024()).name()));
}
Re: typeid. Максимальная длина имени типа
От: Aleх  
Дата: 05.02.11 23:38
Оценка:
Здравствуйте, Aleх, Вы писали:

A>В каких случаях typeid(...).name() возвращает

A>
A>struct ?? :: ??
A>

A>Я подозреваю, тогда, когда длина имени слишком большая. Но никакой информации подтверждающий мои предположения я не нашел.

A>Возможно ли как нибудь менять значение максимально разрешенной длины имени типа? Например на VC++.


Дело в том, что тип получается за счет комбинации шаблонов (например список типов).

Судя по тому, что код
    template<class A, class B> struct AB {};
    typedef AB<int, int> x1;
    typedef AB<x1, x1> x2;
    typedef AB<x2, x2> x3;
    typedef AB<x3, x3> x4;
    typedef AB<x4, x4> x5;
    typedef AB<x5, x5> x6;
    typedef AB<x6, x6> x7;
    typedef AB<x7, x7> x8;
    typedef AB<x8, x8> x9;
    typedef AB<x9, x9> x10;
    typedef AB<x10, x10> x11;
    typedef AB<x11, x11> x12;
    typedef AB<x12, x12> x13;
    typedef AB<x13, x13> x14;

    std::cout << typeid(x14).name() << std::endl;

отрабатывает без проблем, и длина имени типа, который мне нужно вывести гораздо меньше, чем выводится в примере, дело совсем не в длине имени типа. А в чем хз.
Суть в том, что есть список типов, каждый его элемент тоже имеет довольно большое имя. По отдельности имена выводятся, а вот все вместе — нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.