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

Ver*_*tti 3 c++ namespaces private function

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

namespace <named_namespace> {
    namespace {
        …
        <type> <function>(<parameters>);
        …
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其实施.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

正如我所理解的那样,只能通过将函数保存在单个文件(标题或源代码)中来禁用它.

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

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

Ste*_*oft 5

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

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

namespace {
    void func();
}

…

namespace {
    void func()
    {
        …
    }
}
Run Code Online (Sandbox Code Playgroud)