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

Is defining auxiliary functions outside of an object allowed?

本文关键字:定义 函数 对象 是否      更新时间:2023-10-16

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

  • 将它们添加到我的类中 - 这似乎是根据 OOP 范式应该做的事情
  • 将它们放在外面,即单独,只在我的实现文件中 - 因为用这种半冗余方法填充我的类定义会使我的类定义的可读性降低。

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

将它们放在源文件内的未命名命名空间中。
未命名的命名空间允许函数在翻译单元内可见,但在翻译单元外不可见。您的函数仍然具有外部链接,但翻译单元以外的任何人都看不到它们。

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

在它们提供的方法中将它们定义为 lambda。

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