隐藏自由功能

时间:2012-11-22 12:21:48

标签: c++ unit-testing tdd c++98

假设我在一个特定的命名空间中有一堆免费函数,这些函数由单元测试覆盖。我们可以说,我看到了一些可以移动到单独的自由函数中的常用功能。我该怎么做才能隐藏这个新功能?换句话说,此功能仅应由上述自由功能使用,而不能在其他地方使用。我应该将它添加到自由函数命名空间下的命名空间中吗?如果是这样,我应该如何调用命名空间 - 是否有命名约定?

我还应该指出,这个新功能不是单元测试的,因为它是由单元测试的其他功能在内部使用的。也许我很懒,这个问题的解决方案就是我只是对这个功能进行单元测试,然后人们可以根据需要使用它。

2 个答案:

答案 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
}