我正在写一个库函数,我真的需要能够传递参数,如vectors
& maps
。如何将Qt容器作为参数传递给共享库的函数?
我知道你不能有在图书馆
std::map<int> FixMap(const std::map<int> &);
因为二进制兼容性问题的头部声明STL参数的函数,除非库和可执行用相同的编译器&设置编译。
一个另一方面,使用Qt的模板库以下工作
QMap<int> FixMap(const QMap<int> &);
即使他们提供的DLL文件可能被不同的编译器比我的编译。
什么技术确实的Qt他们QMap
,QValueList
,QString
,为了克服这种兼容性问题用?
我已经读了他们的代码了一下,但我无法隔离这个技术。
问题1:有人可以向我解释一下如何编写应用他们技术的代码吗?
我知道的唯一技术,其工作原理是提供string
/map
作为不透明指针,或使用平普尔成语。
问题2:我可以使用STLPort而不是'原生'STL头来实现这种调用吗?这如何影响STL的性能?
你确定你的代码实际上是指预编译的二进制文件吗?通常,每次使用模板代码时都会重新编译。 (你不能“编译”模板。) –
即使使用“qt技术”,当编译不同的编译器/设置时,也可以轻松地遇到问题。它只是在几次你可以替换共享库而不需要重新编译使用它的程序的情况下保存你的文件 – PlasmaHH