具有静态方法的类或具有普通方法的类
A class with static methods or class with normal methods
我有一个实用程序类,它不包含任何数据成员,只是通过它的方法提供一些服务。在这种情况下,哪种方法更好,是用所有静态方法创建一个类,还是用普通方法创建一个类,并通过创建类的对象来调用它们?这两种方法的优缺点是什么?
我认为最好的选择是使用namespace
和free函数。原因:
-
使用普通方法的
class
是令人困惑的,因为它需要实例化,但没有状态。 -
只使用静态方法的
class
更好,但要求用户始终指定类的名称 -
使用
namespace
和自由函数可以防止混淆/不必要的实例化的可能性,并且还允许用户别名namespace
或使用using namespace
,以避免在同一范围内使用多个函数时重复。namespace
也可以跨多个文件
如果没有数据成员,就没有理由使用带有成员方法的类。你必须创建一个类的实例来调用你的方法(一个小的,但可以避免的开销)
调用类的静态方法不会产生开销。对于命名空间中的函数也是如此。
相关文章:
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 如何通过命名空间调用非静态方法
- 如何在没有实例的情况下获取非静态方法的类型?
- 调用从模板派生的类的静态方法,而不指定模板
- 如何在 c++ 中异步调用静态方法?
- C++ 将静态方法转换为简单方法
- 从另一个标头中的标头调用静态方法
- C++中静态方法的局部变量范围
- 仅在少数方法(静态或共享库)中解析的外部符号
- 如何启用使用另一个类的静态方法的模板函数的自动推导,从而消除冗长的调用方代码
- 使用本机 JNI 静态方法实现C++ Java 运行时错误
- 当只有静态方法受到影响时,如何解决C++中的链接器错误?
- 静态变量在同一个翻译单元中被静态方法使用时是否保证被初始化?
- 为什么链接器报告全局函数的乘法定义符号,而不是类静态方法
- 从部分专用模板方法调用模板非静态方法
- 如何使用 c++ 在 cocos2dx 中定义非静态方法
- 使用 CMake 的静态方法链接错误
- 在子类上调用模板化静态方法时获取类的类型名
- 仅具有公共静态方法的帮助程序类
- 调用没有主体的未实现静态方法