如何在不重复此代码的情况下将多个函数放入多个名称空间?

问题描述:

这是一个后续到:如何在不重复此代码的情况下将多个函数放入多个名称空间?

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'中,那么您就没有别的选择。可能你可以用脚本自动化它。 –

你可以简单地做

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'做同样的事情? – F*

+0

@F*是的!你可以做到这一点,如果你想。我更新了我的答案,在结尾处包含此链接https://wandbox.org/permlink/taRPm1hAd2FHbAYo,看看! – Curious

只需使用一个命名空间别名:

namespace OldNameSpaceName = NewNameSpaceName;