c++ - 如何从另一个命名空间中扩展 C++ 命名空间?

标签 c++ namespaces

假设在命名空间 中定义了许多变量。图书馆::符号应该在启动时初始化,如下所示:

namespace library {
    class Symbol; // details not relevant here

    namespace symbols {
        inline const Symbol S1 = Symbol("S1");
        inline const Symbol S2 = Symbol("S2");
    }
}
现在,我需要从其他地方添加更多的那些,引用回符号命名空间(伪代码):
namespace app {
    namespace ::library::symbols {
        inline const Symbol S3 = Symbol("S3");
        inline const Symbol S4 = Symbol("S4");
    }
}
这背后的基本原理是拥有一组可扩展的全局常量,可以在运行时进行比较、解析和打印(示例名称 S1...S4 在这里是任意的)。
该示例无法编译。我尝试了很多想法,但似乎还没有找到任何解决方案。我错过了什么?有没有办法重新打开和扩展图书馆::符号命名空间?是否有替代方案可以实现这一目标,例如通过模板特化?

编辑:
重新构建问题和第二个代码片段以更精确。我的问题是如何在当前命名空间之外扩展命名空间。在这个例子中,我需要扩展 符号 而在命名空间内 应用程序 .
所以问题是是否有一种方法可以将别名返回到更高级别的命名空间而不会导致声明新的命名空间。

最佳答案

Is there a way to reopen and extend the library::symbols namespace? 
是的,你说过。只需重新打开 library::symbols命名空间并在其中放入更多数据。例如:
namespace library
{
    class Symbol;

    namespace symbols
    {
        inline const Symbol S1 = Symbol("S1");
        inline const Symbol S2 = Symbol("S2");
    }
}

// Maybe in another file
namespace library
{
    class Symbol;

    namespace symbols
    {
        inline const Symbol S3 = Symbol("S1");
        inline const Symbol S4 = Symbol("S2");
    }
}

namespace app
{
    using namespace library;

    Symbol dummy()
    {
        // Here use a namespace variable
        return symbols::S3;
    }
}
如果您在另一个文件中重新打开命名空间,您只需要记住包含正确的 header 。

关于c++ - 如何从另一个命名空间中扩展 C++ 命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67967949/

相关文章:

javascript - JavaScript 模块模式与其替代方案有什么区别?

c++ - 为什么这个删除仍然导致运行时异常即使我在删除后将指针设置为NULL

c++ - 引用崩溃?

c++ - 再次: why cannot static member variables be declared inline?

c++ - libsvm c++ 教程

c++ - 错误 : no viable overloading with clang, 用 gcc 编译

r - 从 R 中的命名空间调用运算符

typescript :跨多个文件的同一命名空间内的可见性

python - 如果两个包共享相同的模块名称,您如何支持一个包?

c++ - 执行函数时导致崩溃的变量