繁体   English   中英

C ++:实例化没有名称空间的对象

[英]C++: Instantiate object with no namespace

我卡在两个.hpp文件中,它们具有很多共享相同名称的类/方法,依此类推。 我的问题是A.hpp包装在namespace因此我可以使用想要使用的任何东西> A::className objName(...);

但是我不知道如何使用B.hpp任何东西,它没有包装在命名空间中,所以我不能写B::className objName(...)

要求访问以更改任何.hpp文件的过程(我只是将B包装在名称空间中)将花费大约一天的时间,因此我正在寻找替代且更快的解决方案。

谢谢。

首先,而且可能是最安全的,您可以在名称范围中加上一元作用域运算符::前缀,从而明确限定在全局范围内进行查询的资格。

::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?)定义的或实际上定义的。 不是最好的主意,但有时有用。 如果您考虑使用这种方法,请务必谨慎。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM