我正在编写一个库函数,我真的需要能够将像vectors & maps这样的参数传递给它。
我知道您不能在库的头处声明带有STL参数的函数
std::map<int> FixMap( const std::map<int> & );由于二进制兼容性问题,除非库和可执行文件是用相同的编译器和设置编译的。
另一方面,使用Qt模板库可以完成以下工作
QMap<int> FixMap( const QMap<int> & );尽管它们提供的DLL可能是由与我不同的编译器编译的。
Qt在其QMap、QValueList、QString中使用了什么技术来解决这个兼容性问题?
我读了一些他们的代码,但我无法隔离技术。
问题1:能给我解释一下吗?如何编写应用他们的技术的代码?
我所知道的唯一可行的技术是将string/map作为一个不透明的指针,或者使用pImpl成语。
问题2:可以使用STLPort而不是“本地”STL头来实现这种调用吗?这对STL的性能有什么影响?
发布于 2011-11-18 13:53:22
第一个示例和第二个示例一样好,即使库是使用另一个编译器构建的,而不是使用的编译器。重要的是,应用程序二进制接口 (简称ABI )对于程序和库都是相同的。
Qt在构建库时不使用任何特殊的东西。
https://stackoverflow.com/questions/8183394
复制相似问题