Dll 导出模板类c++;

Dll 导出模板类c++;,dll,dllimport,dllexport,.so,Dll,Dllimport,Dllexport,.so,以下是我的场景: 我有一个可执行文件和多个共享库(.dll或.so)。可执行文件和共享库(.dll或.so)都使用一组公共库。由于它们是公共库,我希望减少共享库的二进制足迹,为了减少共享库的足迹,我从可执行文件导出公共库的内容,并将它们导入共享库(dll或.so) 注意:虽然脚印的大小不是众多原因中的唯一原因,但目前我们可以坚持认为它是主要原因 问题: 在公共库中有一些内联函数和一些模板类。当我使用性能优化标志编译可执行文件和共享库时,内联/模板类在可执行文件和共享库中都内联。如果内联定义被修改

以下是我的场景: 我有一个可执行文件和多个共享库(.dll或.so)。可执行文件和共享库(.dll或.so)都使用一组公共库。由于它们是公共库,我希望减少共享库的二进制足迹,为了减少共享库的足迹,我从可执行文件导出公共库的内容,并将它们导入共享库(dll或.so)

注意:虽然脚印的大小不是众多原因中的唯一原因,但目前我们可以坚持认为它是主要原因

问题: 在公共库中有一些内联函数和一些模板类。当我使用性能优化标志编译可执行文件和共享库时,内联/模板类在可执行文件和共享库中都内联。如果内联定义被修改,并且存在一些具有不同内联函数定义集的共享库,则会产生问题

如何解决这个问题


当我开始考虑这个问题时,甚至CRT提供的STL类都是模板类。即使在他们的情况下,也存在类似的问题。他们解决了这个问题吗?如果他们修改std::vector的定义会发生什么?请提供帮助。

类模板是创建类的一种机制。但是,在定义类的特定实例(使用模板参数)之前,这些类不会被实例化

在您的导出控制文件中

#ifdef XXXX_BUILD
    #define XXXX_EXPORT __declspec(dllexport)
    #define XXXX_EXTERN
#else
    #define XXXX_EXPORT __declspec(dllimport)
    #define XXXX_EXTERN extern
#endif
其中XXXX_BUILD是项目中定义的符号

以导出类

XXXX_EXTERN template class XXXX_EXPORT YourClass<double>;
XXXX\u外部模板类XXXX\u导出类;
其中,double是要实例化类的类型


没有“模板类”这样的东西。C++有类模板。类模板就是一个模板。这不是一门课。不能从库中导出它。也不能从库中导出内联函数。您可以通过使用现代设计良好的编程语言来解决这个问题。是的,我提到了类模板。谢谢你的回答。你能推荐其他解决这个问题的方法吗?除了改变编程语言,你知道一个解决问题的C++库吗?查看编译器附带的标准库。看看boost。这些是现存的最好的C++库。你想比世界上最好的人做得更好吗?这是一个非常高尚的愿望,但你不觉得在网上问陌生人怎么做有点幼稚吗?好的,谢谢你的快速回复。我不认为这是幼稚的,因为解决问题的可能方法之一是在线检查。当你遇到问题时,在论坛上查看是否有人遇到过类似的问题?他们是如何解决的,如果他们已经解决了。可能是“你能提出建议”这句话触发了错误的想法。我不是想强迫你回答,而是问你是否知道其他选择。再次感谢你。