直到现在,如果我需要一些常用的实用函数,我会将它们移动到一个实用类中。就像这样:
#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 ++
的概念? - 还有其他使用命名空间的原因吗?
谢谢帮助。
using class utils;
。 - gan_using namespace
并在不每次编写命名空间名称的情况下引用函数。此外,使用函数可以清楚地表明它们是无状态的(这不是保证,但默认情况下是这样)。相反,使用静态类函数是有理由相信该类中存在某些存储状态的原因。 - Pavel Strakhov