2016-11-23 92 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