命名空间或类中的实用程序函数
Utility functions in a namespace or in a class?
直到现在,如果我需要一些常用的实用程序函数,我会将它们移到实用程序类中。以这样的方式:
#pragma once
class QDate;
class QDateEdit;
class QDialog;
class QWidget;
class GuiUtils final
{
public:
static void moveDialog( QDialog* aDialog, const int aMargin = 4 );
static void setMainWidget( QWidget* aParent, QWidget* aChild, const int aMargin = 0 );
static void setValueBlocked( QDateEdit* aDateEdit, const QDate& aDate );
private:
GuiUtils();
};
class DateUtils final
{
public:
static QDate today();
static QDate yesterday();
static QDate firstDayOfWeek();
static QDate firstDayOfMonth();
static QDate firstDayOfQuarter();
static QDate firstDayOfYear();
static int quarter( const QDate& aDate );
static int quarter( const int aMonth );
private:
DateUtils();
};
但我知道还有其他的选择。我可以把所有函数移到一个命名空间中。以这样的方式:
#pragma once
class QDate;
class QDateEdit;
class QDialog;
class QWidget;
namespace gui_utils
{
void moveDialog( QDialog* aDialog, const int aMargin = 4 );
void setMainWidget( QWidget* aParent, QWidget* aChild, const int aMargin = 0 );
void setValueBlocked( QDateEdit* aDateEdit, const QDate& aDate );
};
namespace date_utils
{
QDate today();
QDate yesterday();
QDate firstDayOfWeek();
QDate firstDayOfMonth();
QDate firstDayOfQuarter();
QDate firstDayOfYear();
int quarter( const QDate& aDate );
int quarter( const int aMonth );
};
对我来说,这似乎是创建实用程序类比名称空间更好的解决方案。我知道我需要输入更多,但是如果我需要为所有实用函数组定义一个新的名称空间,这对我来说似乎有点极端。我通常不创建新的命名空间,而是每次都创建类,所以我使用第一个选项。
但现在我想知道:
- 使用命名空间有什么好处吗?
- 在使用名称空间时是否有更好的性能?
- 是否更符合
C++
的概念? - 还有其他使用名称空间的原因吗?
我相信在您的情况下,出于各种原因,使用名称空间是更好的选择。
例如:
- 似乎你的函数不共享数据。
- 名称空间启用ADL(参数依赖的名称查找)。
请参阅任何样式指南。这是来自Google的:
*非成员函数、静态成员函数和全局函数建议将非成员函数放在命名空间中;…与其创建类来对不共享静态数据的静态成员函数进行分组,不如使用名称空间。*
相关文章:
- C++调用具有 *this 属性的单个帮助程序函数
- 用于检查值是否为其任何参数的帮助程序函数
- C++实用程序::转换在静态链接库中不起作用
- 通过实用程序 fn 将捕获的 lambda 传递给 C 样式回调 - 错误
- 无法将 2D 数组传递到 c++ 中的帮助程序函数中
- C2783: 无法推断帮助程序函数的模板参数
- 友元函数需要一个帮助程序函数
- 在何处放置与类方法相关的帮助程序函数C++
- 当我尝试进行TPC-E测试时,实用程序抱怨"undefined reference"
- 输入处理程序函数中的分段错误
- 在没有格式说明符的情况下在c++中使用类似printf的实用程序
- 当要测试的函数需要用户输入时,如何制作驱动程序函数?
- C++实用程序,用于将长开关语句转换为封装开关案例阶梯的简洁函数调用
- 类参数化与类和帮助程序函数混淆
- 是否有一个Windows驱动程序函数可以执行Windows文件api SeFileAttributes的等效功能
- 创建文件函数是否可以打开仅在WinObj实用程序中的全局目录下列出的设备的句柄?
- C :实用程序名称空间中的正态分布
- 实用程序函数不会在 .h 文件中初始化并在 main 中定义.cpp
- 绑定实用程序和模板化函数
- 命名空间或类中的实用程序函数