为了使头文件中的类定义保持干净,我决定将模板化函数的实现移动到另一个*.h
文件中,该文件包含在主标题中。现在我想在那里使用using namespace
,以使代码更具可读性。在模板实现文件中使用名称空间
但是使用名称空间会影响整个应用程序,因为文件被包含在标题中,而标题本身包含在整个应用程序中。命名空间的using
将散布在文件之外。
我该如何处理?
为了使头文件中的类定义保持干净,我决定将模板化函数的实现移动到另一个*.h
文件中,该文件包含在主标题中。现在我想在那里使用using namespace
,以使代码更具可读性。在模板实现文件中使用名称空间
但是使用名称空间会影响整个应用程序,因为文件被包含在标题中,而标题本身包含在整个应用程序中。命名空间的using
将散布在文件之外。
我该如何处理?
你可以把里面using namespace XX
函数定义将使用声明的范围限定为该功能:
int func(...args...)
{
using namespace std;
// ... body of function
}
使用命名空间别名。
namespace submod_ = topspace::other_project::module::submodule;
然后你可以使用submod_
无论你需要很长的命名空间。
这要求您仍然使用submod_
您将拥有较长的命名空间限定符。从这个意义上说,它并不完全回答你的问题。但我会争辩说,资质的明确性有助于可读性,并有助于防止错误发生。
有一些StackOverflow问题的实例,其中“using”声明引入了代码作者没有意识到的“潜伏”函数。
您可以将using namespace
在 '主头' 的namespace
:
Header.h
#include <string>
namespace Test
{
using namespace std;
string f()
{
return "Test";
};
}
的main.cpp
#include "Header.h"
int main()
{
Test::f();
string test; // Error: identifier "string" is undefined
std::string test;
return 0;
}
“使用名称空间XX”仅扩展到包含“使用名称空间”的作用域。因此,例如,如果你在方法定义中使用'namespace',它就不会“溢出”。不幸的是,你不能在'class'级别使用这些。 (即'class foo {using namespace std; ...}') –
是在命名空间中定义的类吗? – elyashiv
@JoeZ我是否可以用'{''}''将所有内容封装在模板文件中以创建一个封装范围? – danijar