0

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

我确实知道一个问题与模板调试和跨 dll 边界的模板有关,但与如何解决它无关——或者是否有可能解决问题。

我相信还有其他问题,但我只发现对它们的模糊引用。

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


编辑:也许问题只出在STL, 而不是一般的模板?

两个引用:

您无法在 Windows 上跨库边界公开 STL 调用而不会感到头疼。

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

4

2 回答 2

2

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

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

于 2012-11-11T01:36:42.573 回答
1

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

一些 STL 类包含嵌套类。这些类无法导出。例如,deque 包含一个嵌套类 deque::iterator。如果你导出 deque,你会得到一个警告,你必须导出 deque::iterator。如果您导出 deque::iterator,您会收到必须导出 deque 的警告。这是由于模板类一旦实例化就不能重新实例化和导出的设计限制造成的。目前唯一可以导出的 STL 容器是 vector。其他容器(即map、set、queue、list、deque)都包含嵌套类,不能导出。

于 2012-11-11T02:46:37.670 回答