【问题标题】:Make a namespace private in C++在 C++ 中将命名空间设为私有
【发布时间】:2015-10-01 12:11:45
【问题描述】:

考虑这种情况。我正在编写一个库,并希望将我的数据包装在一个命名空间中。例如:

//header.h
#pragma once

namespace wrapper
{
    // some interface functions here..
}

我想将我的命名空间设为私有。这样就没有人可以在里面写任何东西了。例如,我们总是可以这样写。

namespace std
{
    // some data here..
}

所以我想防止最后一种情况。除了使用封装在类中的静态函数之外,还有什么技术可以做到这一点吗?

【问题讨论】:

  • 您无法真正阻止其他人扩展您的命名空间。但是我已经看到像internal_ 这样的额外命名空间被用来让每个人都清楚。
  • 您不会将数据放在 C++ 的命名空间中。你把这种数据放在classes 中作为static 数据,你可以把它变成private。 PS:我什至不确定你所说的数据是什么意思。很高兴在问题中看到一些示例概念代码。

标签: c++ namespaces wrapper private


【解决方案1】:

命名空间不能设为私有,命名空间没有访问控制(即类似于类)。即使不尝试编辑头文件,也可以随时添加命名空间。

替代方案包括;

  • 将数据放入 cpp 文件中,如果需要,仍保留在命名空间中。因此,数据不是“私有”的,但由于它不在标头中,因此对客户端也不“可见”。

  • 这可能更好,但考虑到问题可能需要更多的努力;是利用“pimpl”(或private class data)成语向客户端“隐藏”类中的数据。也可以使用bridge pattern

【讨论】:

    【解决方案2】:

    这是不可能的。如果一切都失败了,我可以随时编辑你的头文件。

    【讨论】:

    • 编辑标题??怎么样??
    • 我不明白其中的原因。是什么阻止您编辑他的源文件,按照您想要的方式更改所有内容。
    【解决方案3】:

    不,没有。一个命名空间总是可以被添加到的,除非它是一个匿名命名空间。但它们只能驻留在单个编译单元中。

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2012-08-26
      • 1970-01-01
      相关资源
      最近更新 更多