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

时间:2015-06-16 11:31:01

标签: c++ function namespaces private

如果我以明显的方式在 .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

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

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

或者可能将头文件拆分为&#39; public&#39;和私人&#39;零件效率更高?

1 个答案:

答案 0 :(得分:5)

您不能拥有适用于翻译单元的匿名命名空间,因此在.h中放置匿名命名空间将无法正常工作。在每个翻译单元(.cpp)中,该名称空间被分配了一个不同的唯一名称。

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

namespace {
    void func();
}

…

namespace {
    void func()
    {
        …
    }
}