在c++中使命名空间私有

Make a namespace private in C++

本文关键字:命名空间 c++      更新时间:2023-10-16

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

//header.h
#pragma once
namespace wrapper
{
    // some interface functions here..
}

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

namespace std
{
    // some data here..
}

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

没有。总是可以添加命名空间,除非它是匿名命名空间。但是它们只能存在于单个编译单元中。

这不可能。如果以上方法都失败了,我还可以编辑你的头文件

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

替代品包括;

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

  • 这可能更好,但可能需要更多的努力;是利用"pimpl"(或私有类数据)习语对客户端"隐藏"类中的数据。