0

我正在用 C++ 编写 Windows COM,我看到很多函数都带有前缀,::因此全局命名空间版本被调用。这是为什么?

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

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

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

还有许多其他人。

这让我感到困惑,为什么程序员选择显式解析命名空间以及为什么他们不只是写:

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

有任何想法吗?

4

1 回答 1

1

不,这在 COM 编程中并不常见,无论如何在我编写或研究的任何内容中都不常见。COM 本身为全局命名空间添加了一些名称,没有那么多的辅助函数。实现 COM 接口的一种常见方法是使用 C++ 类,您可以将其粘贴在您喜欢的任何命名空间中,因为它根本不会暴露在模块之外。我怀疑这只是您看到的代码的团队更喜欢的东西。如果您在一本书中看到它,那么这是增加书籍代码示例可以轻松放入现有程序的几率的好方法。否则没有任何问题。

于 2012-04-14T19:16:58.687 回答