是否允许在对象外定义辅助函数?

时间:2013-01-23 15:02:48

标签: c++ coding-style

我有一个类和一个给定的非常复杂的方法,为此我已经定义了一些辅助函数,但是在其他任何地方都没有使用它们。现在我想知道我是否应该

  • 将它们添加到我的班级 - 它似乎应该根据OOP范例完成它
  • 将它们保留在外面,即仅在我的实现文件中分开 - 因为用这种半冗余方法填充我的类定义会使我的类定义更不易读。

我的问题是,当涉及C ++风格时,我该怎么办?我觉得第二种解决方案违背了OOP原则,尽管C ++不是面向对象的语言,而是混合语言。我提到的函数,如果实现为类方法,将是静态的。

2 个答案:

答案 0 :(得分:7)

将它们放入源文件中的 Unnamed namespace 未命名的命名空间允许您的函数在翻译单元中可见,但不能在翻译单元之外。您的功能仍然具有外部链接,但对于翻译单元以外的任何人来说,它们都是不可见的。

答案 1 :(得分:2)

FWIW,我要补充一点:到目前为止给出的答案都很好,但是从C ++ 11开始,我发现对于严格的辅助函数,有一个更好的,更少侵入性的解决方案:

在他们服务的方法中将它们定义为lambda。

这将使它们在其他任何地方都不可见,并为它们提供适当的访问权限,而无需使用friend声明或使其成为私有静态成员。