我陷在两个.hpp
文件中,这些文件有很多共享相同名称的类/方法,依此类推。我的问题是A.hpp
包裹在namespace
里面,所以我可以使用我想使用的任何东西> A::className objName(...);
但是我不知道如何使用B.hpp
中的任何东西,因为它没有包装在名称空间中,所以我无法编写B::className objName(...)
。
要求访问以更改任何.hpp
文件的过程(我只是将B包装在名称空间中)需要大约一天的时间,所以我正在寻找替代的和更快的解决方案。
谢谢。
答案 0 :(得分:2)
首先(可能也是最安全的方法),您可以在名称范围中添加一元作用域运算符::
作为前缀,从而明确限定在全局范围内进行查找的条件:
::classFromB foo(/*...*/);
::globalFuncFromB( foo, &::globalVarFromB ); // Obviously this gets rather tedious.
第二,假设没有using
指令(using namespace A;
)或声明(using conflictsWithB = A::className
)或其他声明不会产生冲突,则通常可以依靠不合格的查找:
classFromB foo(/*...*/);
globalFuncFromB( foo, &globalVarFromB );
最后,您可以将包含文件的全部内容包装在名称空间中:
namespace B {
#include "B.hpp"
}
这有很多潜在的问题,特别是如果假定B.hpp中的任何声明是在标头本身或全局范围内的其他地方(实现B.cpp?)定义的或实际上定义的。不是最好的主意,但有时有用。 如果您考虑使用这种方法,请务必谨慎。