【发布时间】:2011-01-31 21:44:27
【问题描述】:
我有一个包含大量符号的命名空间,但我想覆盖其中一个:
external_library.h
namespace LottaStuff
{
class LotsOfClasses {};
class OneMoreClass {};
};
我的文件.h
using namespace LottaStuff;
namespace MyCustomizations
{
class OneMoreClass {};
};
using MyCustomizations::OneMoreClass;
my_file.cpp
int main()
{
OneMoreClass foo; // error: reference to 'OneMoreClass' is ambiguous
return 0;
}
如何解决“歧义”错误,而不用一千个人“使用 xxx;”替换“使用命名空间 LottaStuff”声明?
编辑:另外,假设我不能编辑 my_file.cpp,只能编辑 my_file.h。因此,不可能按照下面的建议在任何地方用 MyCustomizations::OneMoreClass 替换 OneMoreClass。
【问题讨论】:
-
这里有一个提示——不要使用“using”关键字,而是使用完全限定名来引用类:vector -> ::std::vector !
-
C++11 将有一个很好的功能来控制版本命名空间(内联命名空间),这将允许用户准确地得到这个......再说一次,你可能需要等待比你想要的更多的时间编译器中的功能(除非您使用 gcc >4.4)open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
标签: c++ namespaces