防止第三方使用我的整个命名空间
Prevent third party from using my entire namespace
尽管我已经搜索过,但我不知道这是否可以。
如何阻止库用户在他/她的代码中的任何地方编写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;
之后发生碰撞,那是他们自己的错。通常,如果尝试尝试,就不可能阻止人们射击自己。
最后,从某些第三方名称空间中汲取所有名称并不是偶然发生的事情,而是自时发生以来一直不鼓励的。如果用户决定无论如何都会做到这一点,他们最好知道自己在做什么。确实不是库维护者的问题。
一个(可疑的)解决方法是,我能想到的是用同名的类或结构替换您的名称空间,并将您的名称空间中的所有内容变成此类的(静态)成员。
struct myns final
{
class MyClass
{
}
class string
{
}
private:
// private constructor, copy constructor and assignment operator
// ...
};
这将排除程序员,使用您的库编写using namespace myns
,但是...好吧,就像我说的那样,我认为这样的解决方法很可疑。
请注意,用户仍然可以使用类型的别名,例如:
using string = myns::string;
相关文章:
- 在命名空间中使用全局命名空间中的函数
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 使用另一个命名空间中的函数C++
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- 具有命名空间范围的名称的 C++ 内部链接
- 有没有办法不使用命名空间中的项?
- 了解带有命名空间污染的 TOTW 153 示例
- 不同C++文件中未命名命名空间中的名称可以引用同一个命名事物吗?
- 在类设计中查找外部命名空间中的重载运算符
- 不使用与左右停止工作命名空间 std 的简单比较
- 无法获取 wig %ignore 以忽略命名空间中的类,从而导致编译错误
- 从匿名命名空间映射的辅助值抛出 std::bad_alloc
- 初始化命名空间中的变量是否类似于将它们初始化为类成员?
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 匿名命名空间中的const与静态const
- 如何访问嵌套在命名命名空间中的未命名命名空间变量?
- c++ 内联友元函数是否会导致命名空间之间的名称隐藏?
- 为什么我得到这个不是类或命名空间错误的'enum'?
- 在命名空间中的类中,我可以只退出**类命名空间吗
- 为什么我无法从不同命名空间中的友元类更改类的私有成员?