3

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

我还应该指出,这个新函数没有经过单元测试,因为它被其他经过单元测试的函数在内部使用。也许我很懒惰,这个问题的解决方案是我也简单地对这个函数进行单元测试,然后人们可以根据需要使用它。

4

2 回答 2

3

您可以将其隐藏:使其成为类的私有静态成员函数,然后显式地为每个内联函数添加好友。实施可以在线或离线,访问控制仍然有效。

除非您需要限制访问,否则我会遵循 Boost 约定并将其放在名为detail(或类似名称)的嵌套命名空间中。这只是为了证明它是一个实现细节,而不是一个稳定的公共接口(当然也是为了避免污染命名空间)。

这也避免了将每个空闲函数显式列为好友。

于 2012-11-22T12:33:51.650 回答
1

您可以将帮助函数作为类的私有部分中的静态函数,然后只与允许使用它的函数成为朋友。

class Foo
{
    static int helper() {return 0;}
    friend void baz();
};

void baz()
{
    Foo::helper(); //compiles
}

void buz()
{
    Foo::helper(); //doesn't compile
}
于 2012-11-22T12:31:27.933 回答