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

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

如果我在 .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

据我所知,只能通过将功能保留在单个文件(header 或源)中来禁用它。

Cross-compiler 欢迎解决方案(如果有的话)。

或者将 header 文件拆分为 'public' 和 'private' 部分效率更高?

您不能拥有跨翻译单元工作的匿名命名空间,因此将匿名命名空间放入 .h 不会如您预期的那样工作。在每个翻译单元 (.cpp) 中,该命名空间都分配了一个不同的唯一名称。

分离的声明和定义是可能的,但只能在该命名空间内:

namespace {
    void func();
}

…

namespace {
    void func()
    {
        …
    }
}