编辑:这对我来说似乎并不重复,因为this question范围更广(如何使用)。无论如何,我的问题的答案确实存在于paercebal的answer并且命名空间组合。 SO中的另一个相关来源是另一个question。
我一直在尝试使用命名空间模块化我的代码。 Anon对嵌套命名空间的问题的answer让我想知道它们是否应该用于设计而不是简单地避免名称冲突。
我觉得名称空间(偶尔嵌套的名称空间)对于组织代码很有用,但确保使用world::europe::spain::madrid
之类的东西变得很麻烦。因此,从API的角度来看,在同一名称空间中使用大多数代码(就像std
库一样)效果最好。
我的问题是两个方面:
名称空间应该用于组织代码还是仅仅是为了避免 名称冲突?如果是的话
如何在保留API的同时拥有“复杂”的命名空间结构 干净吗
关于问题2,我一直在使用以下策略:
(1)让一些代码具有自己的命名空间
//mathlib.h
namespace mathlib {
int sum( int a, int b ) {
return a + b;
}
}
(2)并将其带入另一个名称空间
//otherlib.h
#include <iostream>
#include "mathlib.h"
namespace otherlib {
using namespace mathlib; // lookup stuff inside mathlib
void print(int n) {
std::cout << "the int is " << n << "!";
}
}
(3)所以我实际上可以在sum
名称空间下调用otherlib
。
#include "otherlib.h"
int main(){
auto myint = otherlib::sum(1, 2);
otherlib::print(myint);
return 0;
}