好的,我知道我应该将我的代码嵌入命名空间中以处理名称冲突。
例如:
My-Header-Only-Library.hpp
namespace AG {
namespace My_Header_Only_Library {
class Foo {
...
};
}
}
所以我有一个AG::My_Header_Only_Library::Foo。
是的,我经常使用两个级别 - 第一个是AG、AFG、libAG等等 - 用于“我的”东西(例如我已经维护了一些库几十年,比如Valid<T>
)。
我经常为各种模块创建子命名空间。
问题#1:命名空间名称有时会冲突。
是的:我发现所有命名空间名称AG、AFG、libAG都存在冲突。是的,我曾经遇到过与我相同缩写的公司。
(有一段时间我使用GLEW,认为这是一个非常独特的姓氏。那时候我是互联网上唯一一个叫Glew的人,并且是ARPAnet上仅有的第48个具有缩写AG的人。 (AG48)。但自那以后,OpenGL扩展Wrangler基本上将这一点从我身上夺走了。)
我想,“namespace AG_some_random_stuff_675567”不太可能发生冲突。人们这样做吗?使用一些较长的命名空间名称,然后再加上
using AG_lib = AG_some_random_stuff_675567
您是否曾尝试玩弄技巧,比如将命名空间的名称重新定义为其他内容。
例如:
#define AG something_more_unique
问题2:我有时会给、借或允许公司使用我的库。但我要求他们回馈修改,即不要分叉。
他们的编码约定可能不同。
我不希望他们更改命名空间名称,因为这会使合并他们的修改变得更困难。
问题:怎么办?让他们进行以下操作:
using Their_Name = AG_some_random_stuff_675567