我正在编写一个库函数,我真的需要能够传递像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的性能有何影响?
答案 0 :(得分:0)
第一个示例和第二个示例一样好,即使库是使用其他编译器构建的,也不是您使用的编译器。重要的是,Application Binary Interface或简称ABI对于您的程序和库来说都是相同的。
在构建图书馆时,Qt并没有使用任何特殊内容。