Windows上的模板有什么问题?有什么解决方案?

时间:2012-11-11 01:31:57

标签: c++ windows templates dll

我在Linux上,并试图编写跨平台代码。我知道模板很难在Windows上正常使用,但我不记得具体细节。

我知道有一个问题与模板调试和跨越dll边界的模板有关,而不是如何解决它 - 或者甚至可以解决方法。

我相信还有其他问题,但我只是发现了含糊不清的内容。

那么:Windows上的C ++模板有什么问题?除了不使用模板,还有哪些解决方案?


修改:问题可能仅适用于STL,而不是一般的模板?

两个引号:

  

您无法在Windows上跨库边界公开STL调用,而不会出现严重的问题。

  

封装是必须的,我已经用dll边界上的stl容器和windows上的静态库做了一些项目,没有封装就无法使用。

2 个答案:

答案 0 :(得分:2)

  

我知道模板很难在Windows上正常使用。

我从来没有听过这样的话。听起来像毫无根据的FUD,我建议你完全忽略它。

答案 1 :(得分:1)

这是一个问题,from the MS KB编辑:这个只适用于MSVC 5和6;我无意支持这样一个古老的编译器,因此它与我无关):

  

某些STL类包含嵌套类。无法导出这些类。例如,deque包含一个嵌套的类deque :: iterator。如果导出deque,则会收到警告,必须导出deque :: iterator。如果导出deque :: iterator,则会收到必须导出双端队列的警告。这是由设计的限制引起的,一旦模板类被实例化,就无法重新实例化和导出。当前可以导出的唯一STL容器是vector。其他容器(即map,set,queue,list,deque)都包含嵌套类,无法导出。