2016-03-02 37 views
2

我想通過實例解釋我的問題。我正在使用第三方庫,它有自己的命名空間。我想導入這個庫的一部分,在下面提到的命名空間中有它自己的命名空間。如何擴展指定的名稱空間

namespace library { 
    namespace part { 
    } 
} 

當前項目中還有一個層次結構。我想用另一個名稱將library :: part導入並擴展到我的項目中。我嘗試做如下:

#include <library/part> 

namespace project { 
    namespace my_part = library::part; 
} 

namespace project { 
    namespace my_part { 
    void my_extension_1(); 
    void my_extension_2(); 
    } 
} 

這種情況可以用當前的語言工具來完成嗎?如果不是,應該如何做一個解決方法?仍然沒有,爲什麼?

編輯:錯誤消息GCC 5.3.0轉儲:

error: conflicting declaration of namespace ‘project::my_part’

編輯:有一個關於擴展原始的命名空間的想法,但是我要求的。 library :: part用戶不應直接訪問我已添加的功能。

回答

2

我相信你想使自己的命名空間包含 一切library::part包含,多之外,沒有 放置任何東西,更進library::part。喜歡這個?

namespace library { 
    namespace part { 
     const int library_part_i = 123; 
    } 
} 

namespace project { 
    namespace part { 
     using namespace library::part; 
     void my_extension_1(){}; 
     void my_extension_2(){}; 
    } 
} 

int main() 
{ 
    // const int i = library_part_i; <- Does not compile 
    // const int i = project::library_part_i; <- Does not compile 
    const int i = project::part::library_part_i; 
    // library::part::my_extension_1(); <- Does not compile 
    project::part::my_extension_2(); 
    return 0; 
} 
相關問題