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
据我了解,只能通过将功能保留在单个文件(标头或源)中来禁用。
欢迎使用交叉编译器解决方案(如果有的话)。
或者,也许将头文件拆分为"公共"和"私有"部分更有效?
您不能拥有跨翻译单元工作的匿名命名空间,因此将匿名命名空间放入.h
将无法按预期工作。在每个翻译单元(.cpp
)中,该命名空间被分配一个不同的、唯一的名称。
可以进行单独的声明和定义,但只能在该命名空间内:
namespace {
void func();
}
…
namespace {
void func()
{
…
}
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- getline() 的原型/库是什么;
- 在C++中包含原型文件的正确方法是什么?
- 在函数中拥有函数原型的目的是什么?
- C++:在匿名命名空间中声明函数原型的正确方法是什么
- Boost::signals2::signal::connect 的原型是什么?