为什么Windows中的这么多方法C ++中的COM编程明确地解析为全局命名空间?

时间:2012-04-14 18:57:26

标签: com namespaces

我正在使用C ++编写Windows COM,我发现很多函数都以​​::为前缀,因此调用了全局命名空间版本。那是为什么?

我知道可能存在与命名空间的冲突,但它是否经常发生在COM中,每个人都变得如此偏执,以至于现在每个函数都必须明确解决?

以下是我经常看到的一些例子:

wStrLen = ::SysAllocStringLen(NULL, wStr);
::SysFreeString(str);
::CoTaskMemFree(item);

还有很多其他人。

这让我很困惑,为什么程序员选择明确地解析名称空间以及为什么他们不只是写:

wStrLen = SysAllocStringLen(NULL, wStr);
SysFreeString(str);
CoTaskMemFree(item);

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不,这在COM编程中并不常见,不是我编写或研究过的。 COM本身为全局命名空间添加了几个名称,没有那么多辅助函数。实现COM接口的一种常用方法是使用C ++类,您可以将其粘贴到您喜欢的任何命名空间中,因为它不会在模块外部暴露。我怀疑这只是你认为首选代码的团队。如果你在一本书中看到它,那么这是一个很好的方法来增加书籍代码样本可以放入现有程序的几率而不会有太多麻烦。它没有任何问题。