我在Linux上,并试图编写跨平台代码。我知道模板很难在Windows上正常使用,但我不记得具体细节。
我知道有一个问题与模板调试和跨越dll边界的模板有关,而不是如何解决它 - 或者甚至可以解决方法。
我相信还有其他问题,但我只是发现了含糊不清的内容。
那么:Windows上的C ++模板有什么问题?除了不使用模板,还有哪些解决方案?
修改:问题可能仅适用于STL
,而不是一般的模板?
两个引号:
您无法在Windows上跨库边界公开STL调用,而不会出现严重的问题。
和
封装是必须的,我已经用dll边界上的stl容器和windows上的静态库做了一些项目,没有封装就无法使用。
答案 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)都包含嵌套类,无法导出。