我的开发系统(Codegear C ++ Builder)的变化莫测之一是,某些自动生成的标头坚持要求...
using namespace xyzzy
...其中的语句,当我最不想要或期望它时,这些语句会影响我的代码。
有没有一种方法可以某种方式取消/覆盖以前的“ using”语句来避免这种情况。
也许...
unusing namespace xyzzy;
我的开发系统(Codegear C ++ Builder)的变化莫测之一是,某些自动生成的标头坚持要求...
using namespace xyzzy
...其中的语句,当我最不想要或期望它时,这些语句会影响我的代码。
有没有一种方法可以某种方式取消/覆盖以前的“ using”语句来避免这种情况。
也许...
unusing namespace xyzzy;
Answers:
不。但是有一个潜在的解决方案:如果将include指令包含在它自己的名称空间中,例如...
namespace codegear {
#include "codegear_header.h"
} // namespace codegear
...然后抵消该标头中所有using指令的影响。
在某些情况下,这可能是有问题的。这就是为什么每个C ++样式指南都强烈建议不要在头文件中放置“ using namespace”指令。
不,您不能取消使用命名空间。您唯一可以做的就是将using namespace
-statement放在一个块中以限制其范围。
例:
{
using namespace xyzzy;
} // stop using namespace xyzzy here
也许您可以更改用于自动生成的标头的模板。
供以后参考:自XE版本以来,您可以#define一个新值,以避免using namespace System;
包含中的可怕内容:DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE
将sed,perl或其他一些命令行工具用作生成过程的一部分,以在生成生成的标头之后但在使用它们之前修改它们如何呢?
#include<iostream>
#include<stdio.h>
namespace namespace1 {
int t = 10;
}
namespace namespace2 {
int t = 20;
}
int main() {
using namespace namespace1;
printf("%d" , t);
printf("%d" , namespace2::t);
}