私有类函数与未命名的命名空间中的函数

时间:2010-08-12 21:01:42

标签: c++ namespaces coding-style static-members api-design

我发现自己不会有私人课程。如果可能的话,所有候选私有类函数,而不是我放入未命名的命名空间,并将所有必要的信息作为函数参数传递。我没有一个合理的解释,为什么我这样做,但至少它对我来说更自然。因此,我需要在头文件中公开更少的内部细节。

您有什么看法 - 这是正确的做法吗?

4 个答案:

答案 0 :(得分:17)

在我经常工作的半大项目中(超过200万行代码),如果可以,我会禁止私有类功能。原因是私有类函数是私有的,但它在头文件中可见。这意味着如果我以任何方式改变签名(或评论),我有时会得到一个完整的重新编译奖励,这需要几分钟(或几小时,具体取决于项目)。

对此说不,并隐藏cpp文件中的私有内容。

如果我想在一个大型c ++项目上重新开始,我会强制执行PIMPL成语:http://c2.com/cgi/wiki?PimplIdiom以将更多私有细节移动到cpp文件中。

答案 1 :(得分:11)

我过去做过这件事,而且总是很糟糕。您不能将类对象传递给函数,因为它们需要访问私有成员,可能是通过引用(或者您最终使用复杂的参数列表),因此您无法调用公共类方法。而且出于同样的原因,你无法调用虚函数。我坚信(根据经验)这是一个坏主意。

底线:这听起来像是在实现“模块”具有对类的一些特殊访问权限的情况下可能有用的想法,但在C ++中并非如此。

答案 2 :(得分:5)

这基本上归结为一个问题,即所讨论的功能是否真的有意义作为课程的一部分。如果您的唯一目的是保留课程的详细信息,我会考虑使用pimpl习语。

答案 3 :(得分:3)

我认为这是一个很好的做法。它通常具有隐藏辅助结构和数据类型的好处,这减少了重建的频率和大小。如果事实证明它们在其他地方有用,它还可以使函数更容易拆分成另一个模块。