10

这可能不是 C++ 特有的问题,更多的是与面向对象编程有关。我是新手,我怀疑我的设计。我有一个Parser类 ,它基本上实现了许多处理解析表达式的函数,从中缀到后缀的转换等。我在主函数中使用这些Parser函数。我意识到我不需要这个类的任何数据成员。因此,我真的不需要这个类的对象。因此,我最终使类中的每个函数都是静态的。这个设计有什么奇怪的吗?我应该把它作为一个接口吗?有什么建议么?

4

4 回答 4

7
  1. 您需要一个解析器,并且知道您希望它为您做什么——这实际上就是您的“接口”。

  2. 当前的解析器实现不需要任何成员变量 - 因此,要实现您的接口,您不需要类。所以是的,取消你的静态方法。就像 Kevin 所说,使用带有普通旧函数(非静态)的命名空间是一个好主意。

  3. 如果你觉得你需要添加一个需要维护内部状态的新解析器,那么你可能想在 (1) 中定义一个接口 - 一个普通的旧的公开可见的头文件,在你选择的命名空间内带有函数声明就足够了.

于 2013-02-15T00:06:18.833 回答
6

一个只有静态函数的类在我看来与命名空间没有什么区别。那么,为什么不直接使用命名空间呢?

于 2013-02-14T23:57:46.057 回答
1

决定这个问题的方法是如何使用这些功能?

1)如果所有函数都在一个文件中使用,不需要导出到任何地方,那么一定要使用静态函数。为什么?因为您可以直接将它们键入到 .cpp 文件中的类主体中,而不必担心维护声明和保持参数对齐。因为在解析 C++ 类时,会跳过类主体中定义的每个函数内的所有代码,然后在声明所有类成员后进行解析,因此函数都可以相互看到并且处于更好的名称情况。编译器如果您像这样直接在类中声明它们,还将内联许多较小的函数。

2) 如果需要从当前.cpp 文件之外使用函数,则使用普通函数。因为以后可以从其他任何地方使用它们,并且按名称导出它们更容易。

于 2013-02-15T00:26:59.513 回答
0

将实用程序函数设为静态是很常见的,因此,如果您的 Parser 类的函数不相互依赖,您完全可以将它们设为静态。如果它们相互依赖,并且可能以另一种方式完成相同的功能,则应考虑使用接口

于 2013-02-14T23:59:53.757 回答