C++11 使用函数确定命名空间范围



现在,我正在用c ++编写一个复杂的项目。我简化了这个示例,在命名空间中,我定义了两个函数,这两个函数都需要彼此。

namespace Example {
void foo()
{
bar();
}
void bar()
{
foo();
}
}

有没有办法在不将函数与命名空间分开的情况下解决我的问题?

您可以在命名空间内进行转发声明,方式与在全局命名空间范围内完全相同:

namespace Example {
void bar();
void foo()
{
bar();
}
void bar()
{
foo();
}
}

但是,对于任何函数,如果这些函数是在多个翻译单元之间共享的头文件中定义的函数,则需要将它们标记为inline。如果它们是在一个翻译单元中仅以一个.cpp含义声明和定义的函数,那么它们可能应该标记为static,以便可以在其他翻译单元中声明其他具有相同名称的函数,而不会发生名称冲突以及随之而来的 ODR 违规和 UB。

此外,您可以根据需要随时打开和关闭命名空间,并根据需要打开和关闭任意数量的文件和翻译单元。 例如

namespace Example {
void foo();
void bar();
}

在头文件中和

#include<header.h>
namespace Example {
void foo()
{
bar();
}
void bar()
{
foo();
}
}

在相应的.cpp也可以。

最新更新