【发布时间】:2016-11-01 13:21:01
【问题描述】:
不确定以前是否有人问过这个问题。我四处搜索,找不到我的场景的确切答案,但我可能错过了。
问题:我在头文件中有一个命名空间,并且在该命名空间中的标题中有一些函数原型:
namespace Foo{
void SomeFunc();
void SomeOtherFunc(int);
}
在 .cpp 文件中,我想在命名空间中定义函数,同时还通过匿名命名空间为它们都依赖的随机数生成器提供一些保护:
namespace Foo{
namespace{
RNG rando = new RNG();
}
void SomeFunc(){
//implementation
}
void SomeOtherFunc(){
//implementation
}
}
我遇到的问题是无法保证头文件中的原型与我在 cpp 文件中定义的函数相匹配。命名空间代码块中的所有内容都可以只是添加到命名空间的新内容。
在上面的代码示例中, SomeOtherFunc() 是在没有 int 类型参数的情况下实现的,但它的声明说它需要一些参数。实际上,我似乎重载了 SomeOtherFunc() 签名。
我可以在 cpp 文件中使用以下内容:
namespace Foo{
namespace{
RNG rando = new RNG();
}
}
void Foo::SomeFunc(){
//implementation
}
void Foo::SomeOtherFunc(int){
//implementation
}
编译器似乎强制执行函数的声明和实现之间的关系,我喜欢这一点。但是这些函数似乎无法访问匿名命名空间内的数据。
我在这里遗漏了什么吗?我能做些什么来解决我认为在这个实现中存在的问题吗?我不太精通使用(匿名)命名空间,所以如果这看起来很基础,我深表歉意。
【问题讨论】:
标签: c++ function namespaces