如何"取消使用"命名空间?
时间:2020-03-06 15:05:12 来源:igfitidea点击:
我的开发系统(Codegear C ++ Builder)变幻莫测的其中之一是,一些自动生成的标头坚持要求...
using namespace xyzzy
...它们中的语句,当我最不想要或者期望它时,它将影响我的代码。
有没有一种方法可以某种方式取消/覆盖以前的" using"语句来避免这种情况。
可能是...
unusing namespace xyzzy;
解决方案
不,我们不能取消使用命名空间。我们唯一可以做的就是将" using namespace"语句放置一个块以限制其范围。
例子:
{ using namespace xyzzy; } // stop using namespace xyzzy here
也许我们可以更改用于自动生成的标头的模板。
对Visual Studio 2005的快速实验表明,我们可以将这些标头包含在自己的命名空间中,然后"使用"该名称空间中的所需内容(但不要"使用"整个名称空间,因为它将引入我们想要的名称空间)隐藏。
我们可能会在冲突时使用显式命名空间而陷入困境:
string x; // Doesn't work due to conflicting declarations ::string y; // use the class from the global namespace std::string z; // use the string class from the std namespace
没有。但是有一个潜在的解决方案:如果将include指令包含在它自己的名称空间中,就像这样...
namespace codegear { #include "codegear_header.h" } // namespace codegear
...然后抵消该标头中所有using指令的影响。
在某些情况下,这可能是有问题的。这就是为什么每个C ++样式指南都强烈建议不要在头文件中放置" using namespace"指令。
将sed,perl或者其他一些命令行工具用作生成过程的一部分,以在生成生成的标头之后但在使用它们之前对其进行修改,该如何做?