在 C++ 中将命名空间设为私有

Make a namespace private in C++

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

//header.h
#pragma once

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

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

namespace std
{
    // some data here..
}

所以我想防止最后一种情况。除了使用包含在 class?

中的静态函数之外,还有什么技术可以做到这一点吗?

不,没有。名称空间始终可以添加,除非它是 匿名名称空间。但它们只能驻留在一个编译单元中。

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

命名空间不能设为私有,命名空间没有访问控制(即类似于 class)。即使不尝试编辑 header 文件,也可以始终将命名空间添加到。

备选方案包括;

  • 将数据放入 cpp 文件,如果需要,仍然在命名空间中。因此,数据不是 "private",但由于它不在 header 中,因此对客户端来说也不是 "visible"。

  • 这可能更好,但考虑到这个问题可能需要更多的努力;是利用"pimpl"(或者也可以使用private class data) idiom to "hide" the data in the class from the client. The bridge pattern