C++ : static method VS global function VS namespace VS

标签 c++ namespaces global static-methods

Possible Duplicate:
Namespace + functions versus static methods on a class

在哪里写最明智的方式,例如,一个看起来像的函数

点交点(const Line &L1, const Line &L2);

(假设我已经编写了类 PointLine)?

也许我可以使问题更精确一些:我正在考虑以下选项:

  1. 写一个全局函数(声明在line.h,写在line.cpp)
  2. 编写类Line的静态方法
  3. 使用命名空间。
  4. 改为编写函数 Point Line::intersection(const Line & otherLine);

我不喜欢最后一个选项,因为我不希望我的函数是“不对称的”(我的代码中还有其他几个这样的函数示例)。目前它们是全局函数(如选项 1 中所示),但我明白这不是“良好做法”。至于静态方法和命名空间,我还不熟悉这些,所以我不确定。

您认为什么是“最佳”设计?

感谢您的见解!

编辑:让您了解我的项目规模:50 到 100 个类(class)。

最佳答案

这真的取决于你想做什么。如果你只是在写一个非常小的程序,我真的不觉得把它写成一个全局函数有什么问题。但是,如果您的程序至少是中等大小,我会建议使用静态方法,因为您会将其功能与其处理的类组合在一起。

当然,您也可以使用命名空间来做到这一点。但是,我想您无论如何都会有一个 Line 类,因为它似乎很适合面向对象的编程风格。考虑到这一点,我真的看不出有什么理由让它成为一个命名空间而不是类 Line 的静态方法。如果我正在寻找相交方法,那肯定是我首先要看的地方!

我也没有发现最后一个选项有什么问题,但我更喜欢#2。

关于C++ : static method VS global function VS namespace VS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535886/

相关文章:

c++ - 将 STL complex<double> 转换为 fftw_complex 的问题

c++ - 如何将使用#ifdef编写的支持多种平台的代码移动到库函数中?

PHPUnit 无法加载带有命名空间语句的文件

clojure - 为什么 (name <keyword>) 返回 nil?

f# - 在 F# 中自动打开命名空间

java - 当请求的页面或方法找不到时如何定义全局页面?

java - 井字棋游戏。循环困难和扫描仪问题

java - 将Java代码转换为C++

c++ - 在类中正确使用 mutex、lock_guard、unique_lock

python - 将变量 "by name"添加到本地命名空间