猿问

命名空间+函数与类上的静态方法

命名空间+函数与类上的静态方法

假设我已经或即将编写一组相关函数。假设他们与数学有关。在组织上,我应该:

  1. 编写这些函数并将它们放在我的MyMath命名空间中并通过它们引用它们MyMath::XYZ()

  2. 创建一个名为的类MyMath,并将这些方法设为静态,并引用类似的方法MyMath::XYZ()

为什么我会选择一个作为组织我的软件的方法?


杨魅力
浏览 730回答 3
3回答

弑天下

有很多人会反对我,但这就是我的看法:类本质上是某种对象的定义。静态方法应定义与该对象定义密切相关的操作。如果你只是想要一组与底层对象或一种对象的定义无关的相关函数,那么我会说只使用命名空间。就我而言,从概念上讲,这是更明智的。例如,在您的情况下,问自己,“什么是MyMath?” 如果MyMath没有定义一种对象,那么我会说:不要把它变成一个类。但就像我说的那样,我知道有很多人会(甚至激烈地)不同意我(特别是Java和C#开发人员)。

慕神8447489

如果需要静态数据,请使用静态方法。如果它们是模板函数,并且您希望能够为所有函数指定一组模板参数,那么在模板类中使用静态方法。否则,使用命名空间函数。回应评论:是的,静态方法和静态数据往往被过度使用。这就是为什么我只提供两个相关场景,我认为它们可以提供帮助。在OP的具体示例(一组数学例程)中,如果他想要指定参数 - 比如核心数据类型和输出精度 - 将应用于所有例程,他可能会执行以下操作:template<typename T, int decimalPlaces>class MyMath{&nbsp; &nbsp;// routines operate on datatype T, preserving at least decimalPlaces precision};// math routines for manufacturing calculationstypedef MyMath<double, 4> CAMMath;// math routines for on-screen displaystypedef MyMath<float, 2> PreviewMath;如果您不需要,那么一定要使用命名空间。
随时随地看视频慕课网APP
我要回答