是否允许在对象之外定义辅助函数
Is defining auxiliary functions outside of an object allowed?
我有一个类和一个给定的相当复杂的方法,为此我定义了一些辅助函数,但是这些函数在其他任何地方都没有使用。现在我想知道我是否应该
- 将它们添加到我的类中 - 这似乎是根据 OOP 范式应该做的事情
- 将它们放在外面,即单独,只在我的实现文件中 - 因为用这种半冗余方法填充我的类定义会使我的类定义的可读性降低。
我的问题是,当涉及C++风格时,我该怎么办。我觉得第二种解决方案违背了OOP原则,尽管C++不是面向对象的语言,而是一种混合语言。我提到的函数,如果作为类方法实现,将是静态的。
将它们放在源文件内的未命名命名空间中。
未命名的命名空间允许函数在翻译单元内可见,但在翻译单元外不可见。您的函数仍然具有外部链接,但翻译单元以外的任何人都看不到它们。
FWIW,我要补充一点:到目前为止给出的答案很好,但从 C++11 开始,我发现对于严格的辅助功能,有一个更好且侵入性更小的解决方案:
在它们提供的方法中将它们定义为 lambda。
这将使它们在其他任何地方都不可见,并赋予它们适当的访问权限,而无需使用 friend
声明或使其成为私有静态成员。
相关文章:
- 在命名空间中定义函数还是限定函数
- 为什么在定义函数之前先声明它
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 这个c++代码是如何在没有定义函数的情况下运行的
- 具有外部"c"和程序集的未定义函数
- 已定义函数时出现 G++ "未定义的引用"错误
- 将自定义函数传递到基抽象类中以延迟执行
- C++使用 rand 定义函数语法
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- 使用定义函数模板别名
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 在内联程序集中定义函数和从 C++ 调用时出现问题
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 朋友定义函数的名称空间是什么
- 介子 对用户定义函数的未定义引用
- 如何使用 "using" 关键字定义函数原型/签名
- 在 C 结构中定义C++函数