在C++中定义一组静态方法

6

哪个更合适:

class xyz {
  static int xyzOp1() { }
  static int xyzOp2() { }
};

或者

namespace xyz {
  static int xyzOp1() {}
  static int xyzOp2() {}
};

使用类标签定义时,与命名空间标签相比,我们可以得到特定的内容吗?

此外,在内存管理方面是否有任何不同需要我们担心?

3个回答

9
它们的意思不同。在类上下文中,“static”表示方法不需要对象来执行,因此更像自由函数。在命名空间上下文中,它表示函数具有内部链接,因此仅适用于定义它们的翻译单元。
此外,类的成员默认为私有,因此按原样编写,类函数仅可从彼此调用。您需要添加“public:”访问说明符或将类设置为“struct”以更改此内容。
如果您需要一堆自由函数并且不需要类对象,则将它们定义为命名空间中的非静态函数可能更合适。如果它们在头文件中定义,则通常需要声明为“inline”。如果它们在类中定义,则这是暗示的。

6
在没有看到这些函数的主体之前,我会说命名空间更加适合。使用命名空间,您可以有using语句,这样在调用函数时就不必完整限定函数名称。
唯一需要使用类的情况是静态方法与类的对象有任何关联,例如当它们需要访问实例的私有成员时。根据您的描述,似乎您不会创建xyz的任何实例,因此在这里不应该使用类。
从内存管理的角度来看,这些方法没有任何区别。

1
谢谢,我正在编写一些帮助程序来从解析/proc文件系统中获取系统信息,这些帮助程序实际上不需要与类关联,在我的要求中,使用命名空间是有意义的。如果我想隐藏一些被其他助手程序调用但不被公开的辅助程序,则情况可能会改变,在这种情况下,我可能更喜欢使用类方法。 - harishvk27

2
选择使用哪种方法的主要因素是您的函数本身可能希望操作私有状态或利用私有方法,在这种情况下,静态类肯定是更好的选择。
还有一些其他细微差别,但最终静态类将为您提供更多的封装控制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接