3

我使用 cocos2dx。当我使用其中的类时,我需要cocos2d::经常输入,除非我输入using namespace cocos2d;.

如何避免一直重复命名空间?

4

2 回答 2

7

有几种方法可以使用来自其他命名空间的东西,而不必在每个实例上重复命名空间。

  • 导入整个命名空间:using namespace cocos2d;您现在可以仅按名称使用该命名空间的所有成员,而无需命名空间前缀。这可能会污染您自己的命名空间,可能会有很多名称(取决于导入的命名空间的内容),这可能是不可取的。
  • 从该命名空间导入单个名称:using cocos2d::MyClassName;这只导入给定的名称。好处是你的命名空间没有被污染。缺点是您必须为要导入的每个命名空间成员执行此操作。如果您只需要一些,那么这种方法很好。
  • 创建命名空间别名:namespace co = cocos2d;现在您可以引用cocos2d命名空间的成员,就好像它们是co命名空间的成员一样。
  • 创建类型别名(C++11 起):using CoClass = cocos2d::MyClassName;然后您可以使用您选择的标识符来引用别名成员。当导入的类型在您自己的命名空间中隐藏类型时,这会特别有用。
于 2013-08-14T04:27:47.783 回答
3

克里斯的回答是正确且完整的,但我要补充一点,明确指定每个成员的命名空间以避免在包含您的头文件的其他文件中出现歧义是一个更好的主意。

using namespace cocos2d;将在包含您的标头的每个文件中隐式使用该命名空间。您可以将其放在 .cpp 文件中。using cocos2d::MyClassName;命名空间别名也是如此。

这些都会起作用,但你不应该使用它们。

请参阅问题的答案:C++ 标头中的“使用命名空间”

于 2013-08-14T04:49:31.997 回答