我有一组相当庞大和复杂的程序可以从 VC8 移植到 VC9。其中一个模块有许多分层的 typedef,这会导致编译器生成 C4503 警告(装饰名称被截断)。生成的 LIB 文件将无法正确链接到项目中的其他模块。VC8 对此没有任何问题,这使我得出结论,要么修饰过程已更改为生成更长的名称,要么已减少修饰名称长度的内部限制。克服这个问题的最好方法是什么?
由于遗留代码的原因,MSDN 建议用结构替换 typedefs 是不切实际的。
有问题的 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;