gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:35 24 4
gpt4 key购买 nike

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

我知道您不能在库的 header 处声明带有 STL 参数的函数

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

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

另一方面,使用Qt 模板库可以实现以下效果

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

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

Qt 使用什么技术来解决这个兼容性问题?

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

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

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

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

最佳答案

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

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

关于c++ - Qt 容器如何作为参数传递给共享库的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8183394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com