2

我正在编写一个库函数,我真的需要能够将vectors&之类的参数传递maps给它。

我知道你不能在库的头文件中声明一个带有 STL 参数的函数

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

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

另一方面,使用Qt 模板库进行以下工作

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

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

Qt使用什么技术来QMap克服这个兼容性问题? QValueListQString

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

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

我知道的唯一可行的技术是提供string/map作为不透明的指针,或使用pImpl成语。

问题 2:我可以使用 STLPort 代替“本机”STL 标头来实现这种调用吗?这对 STL 的性能有何影响?

4

1 回答 1

0

第一个示例与第二个示例一样好,即使该库是使用另一个编译器而不是您使用的编译器构建的。重要的是Application Binary Interface(简称 ABI)对于您的程序和库都是相同的。

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

于 2011-11-18T13:53:22.473 回答