假设在命名空间 中定义了许多变量。图书馆::符号应该在启动时初始化,如下所示:
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/