假设我在一个特定的命名空间中有一堆免费函数,这些函数由单元测试覆盖。我们可以说,我看到了一些可以移动到单独的自由函数中的常用功能。我该怎么做才能隐藏这个新功能?换句话说,此功能仅应由上述自由功能使用,而不能在其他地方使用。我应该将它添加到自由函数命名空间下的命名空间中吗?如果是这样,我应该如何调用命名空间 - 是否有命名约定?
我还应该指出,这个新功能不是单元测试的,因为它是由单元测试的其他功能在内部使用的。也许我很懒,这个问题的解决方案就是我只是对这个功能进行单元测试,然后人们可以根据需要使用它。
答案 0 :(得分:3)
您可以隐藏它:使其成为类的私有静态成员函数,然后明确地与每个内联函数相关联。实施可能是内部或外部的,访问控制仍然有效。
除非您需要来限制访问,否则我将遵循Boost约定并将其放在名为detail
的嵌套命名空间(或类似的东西)中。
这只是为了记录它是一个实现细节,而不是一个稳定的公共接口(当然,为了避免污染命名空间)。
这也避免了必须明确地将每个免费功能列为朋友。
答案 1 :(得分:1)
您可以将辅助函数作为类的私有部分中的静态函数,然后只对允许使用它的函数表示友好。
class Foo
{
static int helper() {return 0;}
friend void baz();
};
void baz()
{
Foo::helper(); //compiles
}
void buz()
{
Foo::helper(); //doesn't compile
}