只需将其声明为相同名称的等效1namespace
即可!
file1.cpp
namespace Example {
int vartest;
void foo();
}
file2.cpp
namespace Example {
int othervar;
void otherfoo();
}
命名空间被合并。
它们必须在头文件中声明吗?
不需要。你可以在 namespace
中声明任何一个 namespace
。(注意,“全局作用域”也是一个 namespace
)
如何在命名空间中声明函数?
只需在 namespace
内部声明即可,就像你已经做过的那样。
假设我正在处理一个包含多个文件的大型项目。我在一个文件中定义了一个命名空间,然后想要向该命名空间添加更多的函数,但这些函数在另一个文件中定义。这能行吗?
相同名称的命名空间将会合并到同一个命名空间中。
namespace X { void foo(){} }
namespace X { void foo(){} } //Error, redefinition of `foo` because the namespace ::X is merged
namespace X { void foo(){} }
namespace Y { void foo(){} }
namespace X { void foo(){} }
namespace Y { void foo(){} }
namespace Y {
namespace X {
void foo(){}
}
}
1 请注意,所谓的“全局作用域”实际上是一个名为全局命名空间
的命名空间。
static
的一个有用替代品。现在,namespace { bool Ireturntrue(){ return true; } }
已经被很好地隔离开来,在链接时不会增加名称污染。 - user4581301