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

How can Qt containers be passed as parameters to functions of a shared library?

本文关键字:参数传递 共享 函数 Qt      更新时间:2023-10-16

我正在编写一个库函数,我真的需要能够传递像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的性能有何影响?

第一个例子和第二个例子一样好,即使库是使用另一个编译器构建的,而不是使用您正在使用的编译器。重要的是,应用程序二进制接口(简称ABI(对于程序和库都是相同的。

Qt在构建库时不使用任何特殊的东西。