Подтвердить что ты не робот

Как я могу обойти Visual С++ 2005 "Обозначенная длина имени превышена, имя было усечено" предупреждение?

Например, скажем, почему-то у меня был фрагмент кода, который выглядел так:

mutable std::vector<std::vector<std::vector<std::vector<
std::vector<MyNamespace::MyType> > > > > myFreakingLongVectorThing;

и я получаю предупреждение, которое выглядит так:

C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xstring(1665) : warning   
    C4503: 'std::vector<_Ty>::operator []' : decorated name length exceeded, name was truncated
    with
    [
      _Ty=std::vector<std::vector<std::vector<std::vector<std::vector<MyNamespace::MyType>>>>>
    ]

Можно ли каким-либо образом переписать эту длинную векторную вещь, чтобы не получить это предупреждение? Я все еще хочу, чтобы структура данных была одинаковой, но не получала этого предупреждения. Я не хочу отключать предупреждение. Возможно ли это?

Примечание. Это Visual Studio 2005

.... если вам действительно интересно, почему я работаю с такой ужасной структурой данных, это вызвано автоматически сгенерированным кодом.

4b9b3361

Ответ 1

Если вы не хотите видеть предупреждение, вы должны либо отключить его, либо использовать более новый компилятор.

Предупреждение о том, что информация об отладке ограничена 255 символами для имени типа. Пока эти 255 символов не идентичны для двух разных типов, вы в порядке. И если они идентичны, вы все равно ничего не можете сделать!

Просто отключите его, пока не сможете обновить компилятор!

Ответ 2

Это не все, что отличается от ошибки, которую я использовал для получения на Visual С++ 6 в любое время, когда я делал что-либо с картами STL. Вам просто нужно укусить пулю и сообщить компилятору заткнуться об этом предупреждении. Он получил фундаментальный внутренний предел того, как долго может быть имя типа. Как бы то ни было, это довольно бесполезное предупреждение, просто жалуясь на ограничение внутреннего имени компилятора/отладчика.

#pragma warning(disable : 4503)

И если вы вообще думаете о переносе на другой компилятор, просто оберните его в #ifdef для Visaul С++:

#ifdef MSVC
  #pragma warning(disable : 4503)
#endif