【问题标题】:How do I put several functions into multiple namespaces without duplicating this code?如何在不复制此代码的情况下将多个函数放入多个命名空间?
【发布时间】:2017-07-06 11:57:43
【问题描述】:

这是对以下内容的跟进:

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
}

我的问题:有没有更简单的方法来做到这一点?

【问题讨论】:

  • 把所有的都放在一个唯一的命名空间里,using 完整的命名空间(可能是inline)。
  • 如果您在NewNamespaceName 中有不应该在OldNamespaceName 的符号,那么不,您别无选择。可能您可以使用脚本将其自动化。

标签: c++ namespaces backwards-compatibility


【解决方案1】:

只需使用命名空间别名:

namespace OldNameSpaceName = NewNameSpaceName;

【讨论】:

    【解决方案2】:

    你可以这样做

    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

    【讨论】:

    • Private 应该是一个 inline 命名空间,或者至少应该在 NewNamespaceName 内有一个 using namespace Private;
    • 我非常喜欢!我可以在 NewNamespaceName 中添加 using namespace Private; 吗?那么所有共享功能都可以通过NewNamespaceName::print()OldNameSpaceName::print() 访问,对吧?或者inline namespace Private 会做同样的事情吗?
    • @Fabian 是的!如果你愿意,你可以这样做。我更新了我的答案以在末尾包含此链接wandbox.org/permlink/taRPm1hAd2FHbAYo,看看!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2021-11-06
    • 2010-10-18
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    相关资源
    最近更新 更多