如何将Qt容器作为参数传递给共享库的函数?

时间:2011-11-18 13:45:55

标签: c++ qt stl abi

我正在编写一个库函数,我真的需要能够传递像vectors&这样的参数。 maps到它。

我知道你不能拥有在库的标题处声明的STL参数的函数

std::map<int> FixMap( const std::map<int> & );

由于二进制兼容性问题,除非使用相同的编译器和编译器编译库和可执行文件。设置。

另一方面,使用 Qt模板库以下作品

QMap<int> FixMap( const QMap<int> & );

即使他们提供的DLL可能是由不同于我的编译器编译的。

Qt 使用QMapQValueListQString使用哪种技术来克服此兼容性问题?

我已经阅读了他们的代码,但我无法隔离这项技术。

问题1:有人可以向我解释(通过简短的演练吗?)如何编写应用其技术的代码?

我所知道的唯一可行方法是将string / map作为不透明指针,或使用 pImpl 成语。

问题2:我可以使用STLPort而不是“原生”STL标头来实现这种调用吗?这对STL的性能有何影响?

1 个答案:

答案 0 :(得分:0)

第一个示例和第二个示例一样好,即使库是使用其他编译器构建的,也不是您使用的编译器。重要的是,Application Binary Interface或简称ABI对于您的程序和库来说都是相同的。

在构建图书馆时,Qt并没有使用任何特殊内容。