为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
杨魅力 2019-08-06 13:05:22
命名空间+函数与类上的静态方法假设我已经或即将编写一组相关函数。假设他们与数学有关。在组织上,我应该:编写这些函数并将它们放在我的MyMath命名空间中并通过它们引用它们MyMath::XYZ()创建一个名为的类MyMath,并将这些方法设为静态,并引用类似的方法MyMath::XYZ()为什么我会选择一个作为组织我的软件的方法?
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

有很多人会反对我,但这就是我的看法:

类本质上是某种对象的定义。静态方法应定义与该对象定义密切相关的操作。

如果你只是想要一组与底层对象或一种对象的定义无关的相关函数,那么我会说只使用命名空间。就我而言,从概念上讲,这是更明智的。

例如,在您的情况下,问自己,“什么是MyMath?” 如果MyMath没有定义一种对象,那么会说:不要把它变成一个类。

但就像我说的那样,我知道有很多人会(甚至激烈地)不同意我(特别是Java和C#开发人员)。


查看完整回答
反对 回复 2019-08-06
?
慕神8447489

TA贡献1780条经验 获得超1个赞

如果需要静态数据,请使用静态方法。

如果它们是模板函数,并且您希望能够为所有函数指定一组模板参数,那么在模板类中使用静态方法。

否则,使用命名空间函数。


回应评论:是的,静态方法和静态数据往往被过度使用。这就是为什么我只提供两个相关场景,我认为它们可以提供帮助。在OP的具体示例(一组数学例程)中,如果他想要指定参数 - 比如核心数据类型和输出精度 - 将应用于所有例程,他可能会执行以下操作:


template<typename T, int decimalPlaces>

class MyMath

{

   // routines operate on datatype T, preserving at least decimalPlaces precision

};


// math routines for manufacturing calculations

typedef MyMath<double, 4> CAMMath;

// math routines for on-screen displays

typedef MyMath<float, 2> PreviewMath;

如果您不需要,那么一定要使用命名空间。


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 729 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信