我尝试将一个大型项目转换为使用C++11。我遇到了许多链接器错误,这些错误似乎是由于使用C++11编译的库与使用C++03编译的库之间的STL类命名空间不匹配造成的。
例如,假设库B是A的依赖项。B具有以下模板类作为其接口的一部分。
例如,假设库B是A的依赖项。B具有以下模板类作为其接口的一部分。
template <class Type>
class VectorParameter
{
public:
VectorParameter();
virtual ~VectorParameter();
...
}
Library A使用VectorParameter<std::pair<float, float>>
实例化模板。
当我重新使用C++11编译A而没有重新编译B时,我遇到了链接错误,报告如下:
LFE::VectorParameter<std::__1::pair<float, float>>::~VectorParameter()是未定义的符号。
我认为问题在于库A使用了std::__1::pair
而B仍然使用std::pair
。根据这个推理,我假设需要重新编译所有依赖库,以便它们在接口中引用STL类型。
如果是这样,那么将一个大型项目迁移到C++11将需要所有相关组同时切换,这在复杂的项目中似乎不太实际。如何处理这个问题才是最佳实践呢?