我目前在API中具有以下头文件:
// my_library.h
namespace MyLibrary
{
// Private functions
long bar(long id);
unsigned long foo(long id);
// Public functions
void do_public_thing(long id);
}
此头文件在my_library.cpp
文件中具有每个功能的实现。我的问题是我想将bar
和foo
设为私有函数,但是它们的实现仍在单独的.cpp
文件中,所以我不能使用空白的命名空间(至少我不要这样)。我该怎么办?
答案 0 :(得分:3)
我看不出有什么理由应该在标有API公共部分的标头中公开名称空间API私有函数。
您可能想要的是
// my_library.h
namespace MyLibrary {
// Public functions
void do_public_thing(long id);
}
// my_library.cpp
#include library.h
namespace {
// Private functions
long bar(long id) {
// Implementation
}
unsigned long foo(long id) {
// Implementation
}
}
void MyLibrary::do_public_thing(long id) {
// Implementation
long bar_result = bar(id);
unsingned long foo_result = foo(id);
}
在其他任何翻译单元中实现bar()
或foo()
的情况下,匿名名称空间将保护您免受链接器歧义的困扰。