c++ - 防止第三方使用我的整个命名空间

标签 c++

虽然我已经搜索过了,但我根本不知道这是否可能。

如何防止库用户在他/她的代码中的任何地方编写 using namespace myns;

假设我实现了一个库,该库将其所有元素包含在名为 myns 的命名空间中:

namespace myns
{
    class MyClass
    {

    };

    class string
    {

    };
}

这个库将被另一个程序员使用。我怎样才能强制他/她使用

// somewhere in code
myns::MyClass myClass;
myns::string myString;
std::string stdString;

代替

using namespace myns;

// somewhere in code
MyClass myClass;
string myString; // this would most likely be a mess
string stdString;

这将有助于解决命名空间冲突。

最佳答案

你不能。该标准规定可以编写 using namespace myns; 来获取所有名称,对此您无能为力。

如果用户在 using namespace XXX; 后发生冲突,那是他们自己的错。一般来说,如果有人试图搬起石头砸自己的脚,那是不可能阻止他们的。

最后,从某个第三方 namespace 中提取所有名称并不是偶然发生的事情,而是自古以来就一直不鼓励这样做。如果用户决定无论如何都要这样做,他们最好知道自己在做什么。确实不是库维护者的问题。

关于c++ - 防止第三方使用我的整个命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37901066/

相关文章:

C++ "var foo = !!::bar()"语法?

c++ - wxWidgets构建成功后下一步做什么: Visual Studio 2010

c++ - 在C++中使用模板传递数组的问题

c++ - 万无一失的配置方式#define/#ifdef

c++ - 在模板化 Rcpp 函数中调用另一个 cpp 函数

c++ - STL 迭代器、指针和 std::nullptr_t 的模板函数

c++ - 选择重载引用接受函数

c++ - Vulkan,你可以直接公开扩展吗?

c++ - 使用 OpenCV 设置 QuickCam Pro 3000 的帧大小?

c++ - SDL_ttf 奇怪的崩溃问题 SDL_OpenGL