2017-07-06 106 views
3

這是一個後續到:如何在不重複此代碼的情況下將多個函數放入多個名稱空間?

How do I put some code into multiple namespaces without duplicating this code?

我需要更改命名空間的名稱,但要保持向後兼容性。上述方案建議,我會做的是爲每一個功能有做:

namespace NewNamespaceName 
{ 
     void print() 
     { 
       //do work... 
     } 
     // 50 other functions 
} 

namespace OldNameSpaceName 
{ 
     using NewNamespaceName::print; 
     // 50 other using declarations 
} 

我的問題:有沒有一種簡單的方法來做到這一點?

+2

將所有內容放在一個唯一的命名空間中,並使用完整的命名空間(可能是'inline')。 – Jarod42

+0

如果'NewNamespaceName'中的符號不​​應該在'OldNamespaceName'中,那麼您就沒有別的選擇。可能你可以用腳本自動化它。 –

回答

1

你可以簡單地做

namespace NewNamespaceName 
{ 
     void print() 
     { 
       //do work... 
     } 
     // 50 other functions 
} 

namespace OldNameSpaceName 
{ 
     using namespace NewNamespaceName; 
} 

如果NewNamespaceName有其他的事情,你會想包括,但不希望他們在OldNamespaceName,那麼就再拍私人空間和導入到舊的命名空間

namespace NewNamespaceName 
{ 
     namespace Private { 
       void print() { ... } 
       // 50 other functions 
     } 
} 

namespace OldNameSpaceName 
{ 
     using namespace NewNamespaceName::Private; 
} 
這裏

活生生的例子https://wandbox.org/permlink/taRPm1hAd2FHbAYo

+0

儘管'Private'應該是一個'inline'命名空間,或者'NewNamespaceName'內應該至少有一個'using namespace Private;'。 – Angew

+0

我非常喜歡!我可以在NewNamespaceName中添加'使用namespace Private;'嗎?然後所有的共享函數都可以通過'NewNamespaceName :: print()'和'OldNameSpaceName :: print()'來訪問,對吧?或者'內聯命名空間Private'做同樣的事情? – Fabian

+0

@Fabian是的!你可以做到這一點,如果你想。我更新了我的答案,在結尾處包含此鏈接https://wandbox.org/permlink/taRPm1hAd2FHbAYo,看看! – Curious

6

只需使用一個命名空間別名:

namespace OldNameSpaceName = NewNameSpaceName; 
相關問題