2013-01-23 48 views
2

我有一个类和一个给定的相当复杂的方法,因为我已经定义了一些辅助函数,但是这些辅助函数并没有在其他地方使用。现在,我不知道我是否应该是否定义允许的对象之外的辅助功能?

  • 将它们添加到我的类 - 它似乎是什么,应当根据OOP范式
  • 让他们之外,即分别,只是在我的实现文件中完成 - 因为用这种半冗余方法填充我的类定义会使我的类定义变得不可读。

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

+2

OOP范例并非荒谬。你的第一个选择可能是什么愚蠢的狂热的人可能会告诉你应该完成,但我不会认为是荒谬的一个好主意。 –

+1

请参阅此文章:http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197 –

回答

7

将它们放入源文件中的Unnamed namespace
未命名的名称空间允许您的功能在翻译单元中可见,但不在翻译单元之外。您的功能仍然具有外部链接,但翻译单元之外的任何人都无法看到它们。

2

FWIW,我要补充一点:目前给出的答案都很好,但因为C++ 11我发现,严格的辅助功能有一个更好的,少管闲事的解决办法:

他们定义作为他们所服务的方法中的lambda表达式。

这将使他们无处不在,并给予他们适当的访问权限,而无需使用friend声明或使其成为私有静态成员。