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
正如我所理解的那样,只能通过将函数保存在单个文件(标题或源代码)中来禁用它.
欢迎使用交叉编译器解决方案(如果有的话).
或者将头文件拆分为"公共"和"私有"部分更有效?
您不能拥有跨翻译单元工作的匿名命名空间,因此将匿名命名空间放入.h将无法按预期工作.在每个翻译单元(.cpp)中,为该命名空间分配一个不同的唯一名称.
可以使用单独的声明和定义,但只能在该命名空间内:
namespace {
void func();
}
…
namespace {
void func()
{
…
}
}
Run Code Online (Sandbox Code Playgroud)