C++ 哪里需要本地扩展或外部方法?

标签 c++ design-patterns refactoring

我对 C++ 还不够熟悉,不知道哪里需要这两个非常相似的重构(引入本地扩展和引入外部方法)。我知道强制使用这些的案例,但我想不出需要这个“技巧”的示例类。我正在制作 C++ 重构教程,以帮助新开发人员,但看起来我也需要你的帮助:)

如果你使用过它,请告诉我在哪里以及为什么使用它。提前致谢。

最佳答案

“外部”方法是操作类的方法,但不是类的成员。在 Java 中,这仅意味着其他类的(静态)方法将第一个类作为参数。在 C++ 中,您需要了解免费 函数。与 Java 不同,在 C++ 中,方法可以存在于类之外。 int main() 是最著名的一个。 STL 还包含免费功能。一个人进去看看就好了。

对于 Java,您链接的站点建议 "foreign methods are a work-around"并建议“引入本地扩展”作为替代重构。在 C++ 中,自由函数不是解决方法。这意味着引入本地扩展的压力要小得多。

此外,在 C++ 中,函数默认不是虚函数,对象通常按值传递。这意味着“引入本地扩展”技术经常会失败。

我希望这能说明您的方法的根本问题:您正在采用 Java 的重构技术来解决特定的 Java 弱点,并尝试将它们转换为具有一组完全不同的弱点的 C++。即使在有效的地方,它也常常是不必要的。

关于C++ 哪里需要本地扩展或外部方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5626521/

相关文章:

c++ - 将字符串映射到 vector 或将不同的键映射到一个值

c++ - 高 CPU 使用率 OpenGL Ver 3.1 + SDL2

c++ - 在发布版本中读取文件时,Debug断言失败

c# - 有人有一种聪明的方法将 DTO 视为更多的 OO 类吗?

Java - 这是一个糟糕的设计模式吗?

javascript - 如何让函数在其位置编写代码

c++ - g++ 在函数 __start 中链接到 crt1.o 时遇到 fatal error

oop - 反射是否违反了 LSP?

java - 使用不同的扩展重构 else-if 运算符?

c# - ASP.NET MVC : Ugly code needs refactoring (returning three values)