如何在不重复此代码的情况下将多个函数放入多个名称空间?
这是一个后续到:如何在不重复此代码的情况下将多个函数放入多个名称空间?
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
}
我的问题:有没有一种简单的方法来做到这一点?
你可以简单地做
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;
}
这里
尽管'Private'应该是一个'inline'命名空间,或者'NewNamespaceName'内应该至少有一个'using namespace Private;'。 – Angew
我非常喜欢!我可以在NewNamespaceName中添加'使用namespace Private;'吗?然后所有的共享函数都可以通过'NewNamespaceName :: print()'和'OldNameSpaceName :: print()'来访问,对吧?或者'内联命名空间Private'做同样的事情? – Fabian
@Fabian是的!你可以做到这一点,如果你想。我更新了我的答案,在结尾处包含此链接https://wandbox.org/permlink/taRPm1hAd2FHbAYo,看看! – Curious
只需使用一个命名空间别名:
namespace OldNameSpaceName = NewNameSpaceName;
将所有内容放在一个唯一的命名空间中,并使用完整的命名空间(可能是'inline')。 – Jarod42
如果'NewNamespaceName'中的符号不应该在'OldNamespaceName'中,那么您就没有别的选择。可能你可以用脚本自动化它。 –