C++:在匿名命名空间中声明函数原型的正确方法是什么

C++: what is the proper way of declaring function prototype in anonymous namespace?

本文关键字:原型 是什么 方法 函数 声明 命名空间 C++      更新时间:2023-10-16

如果我以明显的方式在 .h 中声明它:

namespace <named_namespace> {
    namespace {
        …
        <type> <function>(<parameters>);
        …
    }
}

并将其实现放在.CPP,将发生编译错误:

'<type> <named_namespace>::{anonymous}::<function>(<parameters>)' should have been declared inside <named_namespace>

是否可以在不将函数的实现放在单个文件中的情况下避免此错误?目前我改用关键字static,但它会产生许多烦人的警告:

'<type> <named_namespace>::<function>(<parameters>)' declared 'static' but never defined

据我了解,只能通过将功能保留在单个文件(标头或源)中来禁用。

欢迎使用交叉编译器解决方案(如果有的话)。

或者,也许将头文件拆分为"公共"和"私有"部分更有效?

您不能拥有跨翻译单元工作的匿名命名空间,因此将匿名命名空间放入.h将无法按预期工作。在每个翻译单元(.cpp)中,该命名空间被分配一个不同的、唯一的名称。

可以进行单独的声明和定义,但只能在该命名空间内:

namespace {
    void func();
}
…
namespace {
    void func()
    {
        …
    }
}