在 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。
考虑这个案例。我正在编写一个库并希望将我的数据包装在一个命名空间中。例如:
//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。