2016-11-23 63 views
1

我有一个文件decl.h有以下几点:隐藏声明

namespace foo { 
    ... 
    class A; 
    ... 
} 

我想使用的整个声明从decl.h,除了class A,因为我希望有另一个类,具有相同名称,在我的def.cpp中声明和定义。我正在寻找的东西,可以让我这样做:

# include "decl.h" 
using namespace foo; 
hiding foo::A; 

class A { 
    ... 
}; 

有什么那样的吗?或者唯一的解决办法是在我的def.cpp中明确地将foo中的每一个想要的成员公开吗?

回答

0

您不能隐藏名称空间的成员,当然不能使用using namespace ...语句。

命名空间的重点在于避免像你所描述的命名冲突。

所以,摆脱using namespace foo;声明,并在不同的命名空间包住第二class A,如:

#include "decl.h" 
//using namespace foo; 

namespace defcpp { 

class A { 
    ... 
}; 

} 

现在def.cpp会了解foo::Adefcpp::A。只要您需要使用A,您就必须确定要使用哪一个。例如:

#include "decl.h" 
//using namespace foo; 

namespace defcpp { 

class A { 
    ... 
}; 

} 

class B { 
    defcpp::A a; 
    ... 
}; 

void doSomething() 
{ 
    defcpp::A a; 
    ... 
} 
1

只需删除using namespace foo;。这就是命名空间的重点。

+0

对不起,我的文章的全部内容是找到除此解决方案以外的其他内容 - 正如我在问题中所述。我正在寻找一些关键字或'删除...';'我到目前为止还没有出现过的组合。 – Rubens