如何让代码存在于两个或多个非嵌套命名空间的范围内

How do I get code to exist in the scope of two or more non-nested namespaces?

本文关键字:嵌套 命名空间 范围内 代码 存在 于两个      更新时间:2023-10-16

我希望对象/函数仅在使用所有必需的命名空间时才在当前范围内。

例如,假设有一个 H2O(水)对象。
它依赖于氢命名空间和氧气命名空间才能创建和使用。

由于水依赖于这两个命名空间,因此我想要以下行为:

int main(){
    using namespace oxygen;
    using namespace hydrogen;
    H2O water; //<- Works. In scope.
}

int main(){
    //using namespace oxygen;
    using namespace hydrogen;
    H2O water; //<- NOT IN SCOPE
}
int main(){
    using namespace oxygen;
    //using namespace hydrogen;
    H2O water; //<- NOT IN SCOPE
}
int main(){
    //using namespace oxygen;
    //using namespace hydrogen;
    H2O water; //<- NOT IN SCOPE
}

这可能吗? 如果没有,最好推荐哪些替代方案?

No.(从根本上说,您无法决定其他开发人员如何选择引用您声明的符号。

是不可能的。

我看不出这在哪里会有多大用处。不过,立即想到的想法是拥有一个包含Atom s(或任何正确的化学术语 - 已经有一段时间了)的Molecule,并且只导出oxygen命名空间中的Oxygen Atom,以及各自命名空间中的氢。这意味着只有在氧气和氢气都可见的情况下才能构建水分子。


不过,我仍然有点怀疑这是否是正确的方法。命名空间用于组织。隐藏其他公共类型并不是特别有意义。