私はVC8からVC9に移植するためのかなり大きくて複雑なプログラムのセットを持っています。モジュールの1つには、いくつかの階層化されたtypedefがあり、コンパイラーはC4503警告(装飾名は切り捨てられます)を生成します。生成されたLIBファイルは、プロジェクト内の他のモジュールに適切にリンクされません。VC8はこれに問題がなく、装飾プロセスが変更されてさらに長い名前が生成されたか、装飾された名前の長さの内部制限が減少したと結論付けました。これを乗り越えるための最良の方法は何ですか?
レガシーコードの理由から、typedefをstructに置き換えるというMSDNの提案は実用的ではありません。
問題のtypedefは(サニタイズされたコード)です:
enum Type{
TYPE_COUNT,
TYPE_VALUE
};
typedef MyVector< Container*, CriticalSectionLock > Containers;
typedef MyVector< MyClassType*, CriticalSectionLock >::const_iterator const_iterator_type;
typedef MyVector< stl::pair< string, Type > >::const_iterator const_iterator_def;
typedef MyVector< Container** >::const_iterator const_iterator_container;
typedef MyVector< stl::pair < MyBase*, MyVector< stl::pair< Container**, Containers* > > > >::const_iterator const_iterator;